using Exferia_Aplicacion.Calculos;
using Exferia_Aplicacion.Calculos.VentasCompras;
using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Generales;
using Exferia_Aplicacion.Modelos_Informes;
using Exferia_Aplicacion.Modelos_Listado_Filtros;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Controles;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_General;
using Exferia_Ventas._0_Modelos;
using Exferia_Ventas._1_Datos;
using Exferia_Ventas._3_Vistas.Listados;
using Exferia_Ventas._3_Vistas.ListadosSeleccion;
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;
using static Exferia_Ventas.General.Enumerados_Ventas;

namespace Exferia_Ventas._3_Vistas.Controladoras
{
    public class P_AlbaranCabecera_Controladora
    {
        #region Variables Generales
        private P_AlbaranCabecera g_frm_P_AlbaranCabecera = 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
        private PE_Esperando_BarraProgreso g_frm_PE_Esperando_BarraProgreso;//Pantalla de Espera, para cuando se ejecutan tareas pesadas como cargar, guardar, etc

        //Clases de Negocio Necesarias 
        private VTA_AlbaranesCabecera_Datos g_obj_VTA_AlbaranesCabecera_Datos = new VTA_AlbaranesCabecera_Datos();
        private VTA_AlbaranesCabecera_Resumen_Datos g_obj_VTA_AlbaranesCabecera_Resumen_Datos = new VTA_AlbaranesCabecera_Resumen_Datos();
        private VTA_AlbaranesCabecera_Anexos_Datos g_obj_VTA_AlbaranesCabecera_Anexos_Datos = new VTA_AlbaranesCabecera_Anexos_Datos();
        private VTA_AlbaranesCabecera_DatosViaje_Datos g_obj_VTA_AlbaranesCabecera_DatosViaje_Datos = new VTA_AlbaranesCabecera_DatosViaje_Datos();
        private VTA_AlbaranesFacturasLineas_Datos g_obj_VTA_AlbaranesFacturasLineas_Datos = new VTA_AlbaranesFacturasLineas_Datos();
        private VTA_AlbaranesFacturasLineas_Comentarios_Datos g_obj_VTA_AlbaranesFacturasLineas_Comentarios_Datos = new VTA_AlbaranesFacturasLineas_Comentarios_Datos();
        private VTA_AlbaranesFacturasLineas_TarifasPromociones_Datos g_obj_VTA_AlbaranesFacturasLineas_TarifasPromociones_Datos = new VTA_AlbaranesFacturasLineas_TarifasPromociones_Datos();
        private VTA_AlbaranesFacturasLineas_Trazabilidad_Datos g_obj_VTA_AlbaranesFacturasLineas_Trazabilidad_Datos = new VTA_AlbaranesFacturasLineas_Trazabilidad_Datos();
        private VTA_CobrosAlbaranes_Datos g_obj_VTA_CobrosAlbaranes_Datos = new VTA_CobrosAlbaranes_Datos();
        private VTA_PedidosCabecera_Datos g_obj_VTA_PedidosCabecera_Datos = new VTA_PedidosCabecera_Datos();
        private VTA_PedidosLineas_Datos g_obj_VTA_PedidosLineas_Datos = new VTA_PedidosLineas_Datos();

        public VentasCompras_Impuestos_Calculos g_obj_VentasCompras_Impuestos_Calculos = null;

        public MAE_Clientes g_mdl_MAE_Clientes = null;

        public bool g_bol_Termino_CargaDatos_Inicial = false;//Se utiliza para saber cuando se termina la carga de datos estaticos inciales
        public bool g_bol_ModificacionDatosAfectaLineas = true;//Se utiliza para saber si se modificador datos que afecten a la linea, y que se tienen que grabar la cabecera antes de agregar,modificar o borrar las lineas

        //Modelo de Ejercicio Actual
        public GEN_EjerciciosActivos_Empresa g_mdl_GEN_EjerciciosActivos_Empresa = null;

        private INTERNO_ImportesImpuestos_Modelo g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES = null;

        //Recargo segun el ejercicio de la fecha seleccionada
        public GEN_EjerciciosActivos_Empresa g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA = null;

        //Recargo segun cliente seleccionado
        public bool? g_bol_Recargo_SEGUNCLIENTE = null;

        //Si se estuviera Modificando el Modelo del Registro seleccionado
        public INTERNO_VTA_AlbaranesCabecera_Modelo g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo = null;

        public List<INTERNO_ImportesImpuestos_Modelo> g_lst_INTERNO_ImportesImpuestos_Modelo = new List<INTERNO_ImportesImpuestos_Modelo>();
        public GEN_ImpuestosCabecera g_mdl_GEN_ImpuestosCabecera = null;
        public SRV_Relacion_ClienteProveedor g_mdl_SRV_Relacion_ClienteProveedor = null;
        public List<long> g_lst_Ids_Articulos_Servicio = null;

        private List<INTERNO_GEN_ImpuestosTipos_Listado_Modelo> g_lst_INTERNO_GEN_ImpuestosTipos_Listado_Modelo = null;

        #region Tareas Asincronas
        //Tarea Asincrona de Carga de datos
        private BackgroundWorker g_obj_TareaAsincrona_CargarDatos=null;
        public bool g_bol_CargarDatos_Termino = true;

        //Tarea Asincrona de Borrar de datos
        private BackgroundWorker g_obj_TareaAsincrona_BorrarDatos = null;
        
        //Tarea Asincrona de Grabar de datos
        public BackgroundWorker g_obj_TareaAsincrona_GrabarDatos = null;
        public bool g_bol_GrabarDatos_TerminoCorrectamente = true;

        //TareaAsincrona de Cambio_Cliente
        public BackgroundWorker g_obj_TareaAsincrona_Cambio_Cliente = null;

        //TareaAsincrona de Cambiar Situacion
        public BackgroundWorker g_obj_TareaAsincrona_CambiarSituacion = null;

        //TareaAsincrona de Cambiar el ImpuestoCabecera
        public BackgroundWorker g_obj_TareaAsincrona_Cambio_ImpuestoCabecera = null;

        //TareaAsincrona de Cambiar el Servicio
        public BackgroundWorker g_obj_TareaAsincrona_Cambio_Servicio = null;

        //TareaAsincrona de Cambiar el fecha
        public BackgroundWorker g_obj_TareaAsincrona_Cambio_Fecha = null;
        public bool g_bol_TareaAsincrona_Cambio_Fecha_PerdioFoco = false;//Esta variables se utiliza, porque el LostFocus de Control de fecha, se ejecuta dos veces cuando se muestra una patanlla de espera

        //TareaAsincrona de Cambiar la Delegacion
        public BackgroundWorker g_obj_TareaAsincrona_Cambio_Delegacion = null;

        #endregion

        //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;
        //Estado del Albaran
        public string g_str_Estado = Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO;

        #region Albaran Lineas
        //Tarea Asincrona para la Rellenar DataGridView de AlbaranLinea
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_AlbaranLinea = null;

        //Tarea Asincrona para Borrar AlbaranLinea en base de datos
        private BackgroundWorker g_TareaAsincrona_Borrar_Registro_AlbaranLinea_EnBaseDatos = null;
        public bool g_bol_Borrar_Registro_AlbaranLinea_EnBaseDatos_TerminoCorrectamente = true;

        //Tarea Asincrona para Actualizar el Total del Importe
        private BackgroundWorker g_TareaAsincrona_ActualizarImportes = null;

        //Listado de AlbaranLineas
        public List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo> g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = null;

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

        //Para el filtrado del listado de AlbaranLinea
        public List<string> g_lst_ColumnasAMostrar_VTA_AlbaranesFacturasLineas = new List<string>();
        public ABS_Listado_VTA_AlbaranesFacturasLineas_P_AlbaranCabecera g_obj_ABS_Listado_VTA_AlbaranesFacturasLineas_Albaranes = null;
        public Dictionary<string, object> g_dct_ListadoFiltros_VTA_AlbaranesFacturasLineas = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_AlbaranLinea = 0;
        private int g_int_TotalRegistros_AlbaranLinea = 0;

        #endregion

        #region Albaranes Lineas Comentarios
        //Tarea Asincrona para la Rellenar DataGridView de Comentarios
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios;

        //Tarea Asincrona para Borrar Comentarios en base de datos
        private BackgroundWorker g_TareaAsincrona_Borrar_Registro_AlbaranLineasComentarios_EnBaseDatos;

        //Listado de Comentarios
        public List<INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo> g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo = null;

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

        //Para el filtrado del listado de Comentarios
        public List<string> g_lst_ColumnasAMostrar_VTA_AlbaranesFacturasLineas_Comentarios = new List<string>();
        public ABS_Listado g_obj_ABS_Listado_VTA_AlbaranesFacturasLineas_Comentarios = null;
        public Dictionary<string, object> g_dct_ListadoFiltros_VTA_AlbaranesFacturasLineas_Comentarios = new Dictionary<string, object>();
        #endregion

        #region Albaran Resumen

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

        public ABS_Listado_VTA_AlbaranesCabecera_Resumen g_obj_ABS_Listado_VTA_AlbaranesCabecera_Resumen = new ABS_Listado_VTA_AlbaranesCabecera_Resumen();
        public Dictionary<string, object> g_dct_ListadoFiltros_VTA_AlbaranesCabecera_Resumen = new Dictionary<string, object>();
        public List<string> g_lst_ColumnasAMostrar_VTA_AlbaranesCabecera_Resumen = new List<string>();
        #endregion

        #region Albaran Trazabilidad
        //Tarea Asincrona para la Rellenar DataGridView de AlbaranLineas_Trazabilidad
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad;

        //Tarea Asincrona para la Borrar AlbaranLineas_Trazabilidad
        private BackgroundWorker g_TareaAsincrona_Borrar_AlbaranLineas_Trazabilidad;

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

        //Filtrado del Listado de AlbaranLineas_Trazabilidad
        public List<string> g_lst_ColumnasAMostrar_VTA_AlbaranesFacturasLineas_Trazabilidad = new List<string>();
        public ABS_Listado_VTA_AlbaranesFacturasLineas_Trazabilidad g_obj_ABS_Listado_VTA_AlbaranesFacturasLineas_Trazabilidad = null;
        #endregion

        #endregion

        #region  Constructor
        public P_AlbaranCabecera_Controladora(P_AlbaranCabecera _frm_P_AlbaranCabecera)
        {
            g_frm_P_AlbaranCabecera = _frm_P_AlbaranCabecera;

            g_obj_ABS_Listado_VTA_AlbaranesFacturasLineas_Albaranes = new ABS_Listado_VTA_AlbaranesFacturasLineas_P_AlbaranCabecera(g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales);
            g_obj_ABS_Listado_VTA_AlbaranesFacturasLineas_Comentarios = new ABS_Listado_VTA_AlbaranesFacturasLineas_Comentarios(g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales);
            g_obj_ABS_Listado_VTA_AlbaranesFacturasLineas_Trazabilidad = new ABS_Listado_VTA_AlbaranesFacturasLineas_Trazabilidad(g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales);

            Datos_Iniciales();

            //Terino al carga inicial ####################################################################################################################################
            g_bol_Termino_CargaDatos_Inicial = true;
        }
        #endregion

        #region Datos Iniciales
        public void Datos_Iniciales()
        {
            try
            {
                //Obtener los ImpuestosTipos
                g_lst_INTERNO_GEN_ImpuestosTipos_Listado_Modelo = Datos_Generales.GEN_ImpuestosTipos_Obtener_Listado();

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

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


                //Cargar los valores
                g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Cargar(lst_INTERNO_ArbolSecundarioSeleccion_Modelo_FINAL, g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales, g_frm_P_AlbaranCabecera.P_Base_FechaTrabajo, g_frm_P_AlbaranCabecera);

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

        public void Datos_Pordefecto()
        {
            try
            {
                //Poner Fecha Actual
                g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = g_frm_P_AlbaranCabecera.P_Base_FechaTrabajo.ToString("dd/MM/yyyy");
                g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_FechaEmpresa(g_frm_P_AlbaranCabecera.P_Base_FechaTrabajo, g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.lng_idEmpresa);

                //Si el Usuario tiene una delegacion Asociada por Defecto se pone
                if (g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.Delegacion != null)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Id = g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.Delegacion.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Codigo = g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.Delegacion.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Descripcion = g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.Delegacion.descripcion;
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_FechaBorrado = g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.Delegacion.fechaBorrado;
                }

                //Empleado
                if (Variables.G_MDL_USUARIOVALIDADO_MODELO.empleado_Asociado != null)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Id = Variables.G_MDL_USUARIOVALIDADO_MODELO.empleado_Asociado.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Codigo = Variables.G_MDL_USUARIOVALIDADO_MODELO.empleado_Asociado.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Descripcion = Variables.G_MDL_USUARIOVALIDADO_MODELO.empleado_Asociado.nombre;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_FechaBorrado = Variables.G_MDL_USUARIOVALIDADO_MODELO.empleado_Asociado.fechaBorrado;
                }

                //Buscar la PredefinidoCabecera Albaran de venta
                //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_ALBARANDEVENTA.Id };

                //Pasamos los parametros al metodo y lo ejecutamos
                CTA_PredefinidosCabeceras mdl_CTA_PredefinidosCabeceras = (CTA_PredefinidosCabeceras)obj_MethodInfo_2.Invoke(obj_Clase_2, arr_Parametros_2);
                if (mdl_CTA_PredefinidosCabeceras != null)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Id = mdl_CTA_PredefinidosCabeceras.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Codigo = mdl_CTA_PredefinidosCabeceras.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Descripcion = mdl_CTA_PredefinidosCabeceras.descripcion;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_CTA_PredefinidosCabeceras.fechaBorrado;
                }
                //##################################################################################################################################################################################################

                //Buscar la PredefinidoCabecera Albaran de servicios
                //Cargamos el ensamblado #########################################################################################################################################################################
                Assembly m_assembly_3 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type_3 = m_assembly_3.GetType("" + Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase_3 = Activator.CreateInstance(m_type_3);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo_3 = obj_Clase_3.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAPREDEFINIDOCABECERA_OBTENERMODELO_POR_DEFECTO, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros_3 = { Variables.G_PREDEFINIDOFICHEROS_ALBARANDESERVICIOS.Id };

                //Pasamos los parametros al metodo y lo ejecutamos
                CTA_PredefinidosCabeceras mdl_CTA_PredefinidosCabeceras_Servicios = (CTA_PredefinidosCabeceras)obj_MethodInfo_3.Invoke(obj_Clase_3, arr_Parametros_3);
                if (mdl_CTA_PredefinidosCabeceras_Servicios != null)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Id = mdl_CTA_PredefinidosCabeceras_Servicios.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Codigo = mdl_CTA_PredefinidosCabeceras_Servicios.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Descripcion = mdl_CTA_PredefinidosCabeceras_Servicios.descripcion;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_CTA_PredefinidosCabeceras_Servicios.fechaBorrado;
                }
                //##################################################################################################################################################################################################

                //Marcar como que no se modifico nada
                g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Datos_Pordefecto));
            }
        }
        #endregion

        #region Arbol Secundario
        public void ArbolSecundario_Cambiar_ClienteArticulo(long lng_idCliente)
        {
            try
            {
                //ArbolSecundarioSeleccion Identificadores Necesarios .......................................
                //idCliente
                g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDCLIENTE = lng_idCliente;

                //Se añade el id del articulo ara el listado secundario
                INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = null;
                if (g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows != null &&
                    g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows.Count > 0 &&
                    g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.SelectedRows[0].Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)].Value != null &&
                    !g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.SelectedRows[0].Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)].Value.ToString().Equals("-1"))
                {
                    long lng_iAlbaranLinea = long.Parse(g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.SelectedRows[0].Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)].Value.ToString());

                    if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                    {
                        mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(x => x.id.Equals(lng_iAlbaranLinea)).FirstOrDefault();

                        if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null)
                        {
                            g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULO = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo != null ? mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo.Value : -1;
                            g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULOCOMODIN = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticuloComodin != null ? mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticuloComodin.Value : -1;
                        }
                        else
                        {
                            g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULO = -1;
                            g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULOCOMODIN = -1;
                        }
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULO = -1;
                        g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULOCOMODIN = -1;
                    }
                }
                else
                {
                    g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULO = -1;
                    g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULOCOMODIN = -1;
                }

                //Se añade el id del articulo-cliente ara el listado secundario
                if (g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad.Rows != null &&
                    g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad.Rows.Count > 0 &&
                    g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad.SelectedRows[0].Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.id)].Value != null &&
                    !g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad.SelectedRows[0].Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.id)].Value.ToString().Equals("-1"))
                {
                    long lng_idAlbaranLinea_Trazabilidad = long.Parse(g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad.SelectedRows[0].Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.id)].Value.ToString());

                    if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo!=null)
                    {
                        if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX != null)
                        {
                            g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULOTRAZABILIDAD = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX.Where(x => x.id.Equals(lng_idAlbaranLinea_Trazabilidad)).FirstOrDefault().idArticulo_Trazabilidad;
                        }
                        else
                        {
                            g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULOTRAZABILIDAD = -1;
                        }
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULOTRAZABILIDAD = -1;
                    }
                }
                else
                {
                    g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULOTRAZABILIDAD = -1;
                }

                //Recargar el Arbol Secundario
                g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.RecargarSeleccionNodo();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "" + nameof(ArbolSecundario_Cambiar_ClienteArticulo));
            }
        }
        #endregion

        #region Vaciar datos
        public void VaciarDatos()
        {
            //Modelo de la Cabecera
            g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo = null;

            //Numero Documento
            g_frm_P_AlbaranCabecera.Exferia_TextBox_NumeroDocumento.Text = "";

            //Enumerado TipoCierre
            g_obj_ENUM_VALIDACIONFECHAS_TIPOCIERRE = G_ENUM_VALIDACIONFECHAS_TIPOCIERRE.Ninguno;
            Mostrar_CerradoAbierto();

            //Descuento Final albaran
            g_frm_P_AlbaranCabecera.Exferia_TextBox_DescuentoFinalAlbaran.Text = "";

            //Situacion
            g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPendiente.Exferia_Button_Situacion_Seleccionado = true;
            g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPendiente.Enabled = false;
            g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPagado.Exferia_Button_Situacion_Seleccionado = false;
            g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPagado.Enabled = false;
            g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPartePendiente.Exferia_Button_Situacion_Seleccionado = false;
            g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPartePendiente.Enabled = false;

            //Delegacion
            g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_FechaBorrado = null;
            g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Enabled = true;

            //FormaPago
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //Cliente
            g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_FechaBorrado = null;

            //Moneda
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //ImpuestoCabecera
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //Empleado
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //Vendedor (preventa)
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //Vendedor (preventa habitual)
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //Vendedor (repartidor)
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //Vendedor (cobrador)
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //Vendedor (cobrador habitual)
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //Vendedor (autoventa)
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //ClavePredefinida Albaran
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //ClavePredefinida (Servicios)
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_FechaBorrado = null;

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

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

            //FechaCarga
            g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_DatosViaje_FechaCarga.Exferia_FechaSeleccion_Fecha = "";
            //MatriculaVehiculo
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaVehiculo.Text = "";
            //MatriculaRemolque
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaRemolque.Text = "";
            //Origen
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Origen.Text = "";
            //Destino
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Destino.Text = "";
            //Referencia
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Referencia.Text = "";

            //Listado de impuestos para calculo de resumen
            g_lst_INTERNO_ImportesImpuestos_Modelo = null;
            g_lst_INTERNO_ImportesImpuestos_Modelo = new List<INTERNO_ImportesImpuestos_Modelo>();

            //Descripcion
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Descripcion.Text = "";

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

            //Fecha
            g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = g_frm_P_AlbaranCabecera.P_Base_FechaTrabajo.ToString("dd/MM/yyyy");

            //Servicio
            VaciarDatos_Servicios();

            //AlbaranLineas ................................................................................................................................................
            g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = new List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo>();
            g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows.Clear();
            g_int_TotalRegistrosInsertados_AlbaranLinea = 0;
            g_int_TotalRegistros_AlbaranLinea = 0;
            g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_AlbaranLinea;
            g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_AlbaranLinea;

            #region Anexo
            //cliente
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Cliente.Text = "";

            //direccion
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Direccion.Text = "";

            //pais
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_FechaBorrado = null;

            //provincia
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_FechaBorrado = null;
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Enabled = false;

            //municipio
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_FechaBorrado = null;
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Enabled = false;

            //poblacion
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_FechaBorrado = null;
            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Enabled = false;

            //codigoPostal
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_CodigoPostal.Text = "";

            //nif
            g_frm_P_AlbaranCabecera.Exferia_TextBox_CIFNIF_Anexo_NIF.Exferia_TextBox_CIFNIF_Valor = "";

            //telefono1
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono1.Text = "";

            //telefono2
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono2.Text = "";

            //fax
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Fax.Text = "";

            //observaciones
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Observaciones.Text = "";
            #endregion

            //resumen (Importes e Impuestos)
            g_frm_P_AlbaranCabecera.Exferia_DataGridView_Resumen.Rows.Clear();

            ArbolSecundario_Cambiar_ClienteArticulo(-1);

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

        public void VaciarDatos_Servicios()
        {
            //Servicio
            g_lst_Ids_Articulos_Servicio = null;
            g_mdl_SRV_Relacion_ClienteProveedor = null;

            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Id = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Codigo = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Descripcion = "";
            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_FechaBorrado = null;
            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_RELACIONADOS_Padre_ID = -1;
            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Enabled = false;
            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Objeto_ParaEnviarAMantenimiento = null;

            //NumeroDocumentoManual
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroDocumentoManual.Text = "";

            //NumeroPedidoCliente
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroPedidoCliente.Text = "";

            //Identicket
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Identicket.Text = "";

            //Seccion
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Seccion.Text = "";

            //Departamento
            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Departamento.Text = "";

            //Bloquear panel
            g_frm_P_AlbaranCabecera.Panel_Servicio.Visible = false;
        }
        #endregion

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

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

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

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

                return g_bol_GrabarDatos_TerminoCorrectamente;
            }
            return true;
        }
        public bool ComprobarCambios_SinPreguntar()
        {
            GrabarDatos();

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

            return g_bol_GrabarDatos_TerminoCorrectamente;
        }
        #endregion

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

            try
            {
                //Buscar el Ejercicio segun la fecha
                GEN_EjerciciosActivos_Empresa mdl_GEN_EjerciciosActivos_Empresa = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_FechaEmpresa(DateTime.ParseExact(g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture), g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.lng_idEmpresa);
                if (mdl_GEN_EjerciciosActivos_Empresa != null)
                {



                    string str_CodigoSiguiente = Datos_Generales.Buscar_CodigoSiguiente_Numerico(nameof(VTA_AlbaranesCabecera),
                                                                                                nameof(VTA_AlbaranesCabecera.numeroAlbaran),
                                                                                                nameof(VTA_AlbaranesCabecera.idEmpresa),
                                                                                                g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.lng_idEmpresa,
                                                                                                nameof(VTA_AlbaranesCabecera.idDelegacion),
                                                                                                g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Id,
                                                                                                true,
                                                                                                g_frm_P_AlbaranCabecera.Exferia_TextBox_NumeroDocumento.Exferia_TextBox_MaxLength,
                                                                                                nameof(VTA_AlbaranesCabecera.fecha),
                                                                                                mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaInicio,
                                                                                                mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaFin
                                                                                                );

                    if (!str_CodigoSiguiente.Equals("-1"))
                    {
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_NumeroDocumento.Text = str_CodigoSiguiente;
                    }
                    else
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_CODIGOSIGUIENTE_LIMITEALCANZADO(g_frm_P_AlbaranCabecera.Exferia_Label_NumeroDocumento.Text);
                    }
                }
                //No encontro el ejercicio
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_VALIDACION_FECHASEJERCICIOS_NOTIENEEJERCICIOSCREADOS();
                }

            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BUSCARCODIGOSIGUIENTE();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Buscar_CodigoSiguiente));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BUSCARCODIGOSIGUIENTE();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private INTERNO_ValorDevuelto_Modelo Buscar_CodigoRepetido()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Buscar el Ejercicio segun la fecha
                GEN_EjerciciosActivos_Empresa mdl_GEN_EjerciciosActivos_Empresa = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_FechaEmpresa(DateTime.ParseExact(g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture), g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.lng_idEmpresa);
                if (mdl_GEN_EjerciciosActivos_Empresa != null)
                {

                    string str_Codigo = g_frm_P_AlbaranCabecera.Exferia_TextBox_NumeroDocumento.Text.Trim();

                    bool bol_CodigoRepetido = Datos_Generales.Buscar_CodigoRepetido(nameof(VTA_AlbaranesCabecera),
                                                                                    nameof(VTA_AlbaranesCabecera.numeroAlbaran),
                                                                                    str_Codigo,
                                                                                    nameof(VTA_AlbaranesCabecera.id),
                                                                                    (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id : -1),
                                                                                    nameof(VTA_AlbaranesCabecera.idEmpresa),
                                                                                    g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.lng_idEmpresa,
                                                                                    nameof(VTA_AlbaranesCabecera.idDelegacion),
                                                                                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Id,
                                                                                    true,
                                                                                    nameof(VTA_AlbaranesCabecera.fecha),
                                                                                    mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaInicio,
                                                                                    mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaFin
                                                                                    );

                    if (bol_CodigoRepetido)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_REPETIDO(g_frm_P_AlbaranCabecera.Exferia_Label_NumeroDocumento.Text);
                    }
                }
                //No encontro el ejercicio
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_VALIDACION_FECHASEJERCICIOS_NOTIENEEJERCICIOSCREADOS();
                }

            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CODIGOVALIDACIONREPETIDO();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Buscar_CodigoRepetido));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CODIGOVALIDACIONREPETIDO();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

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

                g_bol_CargarDatos_Termino = 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.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarDatos_Completed);
                    g_obj_TareaAsincrona_CargarDatos.WorkerReportsProgress = false;
                }

                //Vaciar
                VaciarDatos();

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

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_frm_P_AlbaranCabecera.Enabled = true;
                g_bol_Termino_CargaDatos_Inicial = 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_AlbaranCabecera_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_AlbaranCabecera.P_Base_id) == false)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
                }
                else
                {
                    //...........................................................
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
                    {
                        //Cargar Listado AlbaranLinea ...........................................................
                        if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.AlbaranesFacturasLineas != null)
                        {
                            g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.AlbaranesFacturasLineas;
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_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_AlbaranCabecera_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_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_AlbaranCabecera.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_AlbaranCabecera.Salir_P_Base();
                }
                else
                {
                    //Si tiene Lineas Bloqueo la Delegacion (Porque las lineas tiene almacenes que depende de la delegacion)
                    if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Enabled = false;
                    }

                    //Actualizar el control de Resumen de Facturas
                    g_frm_P_AlbaranCabecera.CTU_Cartera_Ventas_AlbaranCabecera.Rellenar_DataGrid(G_ENUM_CTU_CARTERA_VENTAS_TIPODOCUMENTOFILTRO.AlbaranesCabeceraVenta, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, true);

                    //Instanciar la clase de Calculos
                    g_obj_VentasCompras_Impuestos_Calculos = new VentasCompras_Impuestos_Calculos(Variables.G_INT_TIPOCLIENTEPROVEEDOR_CLIENTE_CODIGO,
                                                                                                  g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idCliente.Value,
                                                                                                  g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha,
                                                                                                  g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idEmpresa);


                    //Ordenar
                    g_frm_P_AlbaranCabecera.Ordenar_DataGridView_AlbaranLinea();


                    g_bol_ModificacionDatosAfectaLineas = false;

                    //Si el Ejercicio Tuviera CierreAdministrativo o CierreContable tiene que bloquear todo el Formulario
                    g_obj_ENUM_VALIDACIONFECHAS_TIPOCIERRE = Datos_Generales.ComprobarBloquear_EjercicioCierre(g_frm_P_AlbaranCabecera,
                                                                                                        g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.EjercicioActivo,
                                                                                                        g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.Ejercicios_Listado.ToList(),
                                                                                                        g_frm_P_AlbaranCabecera.Exferia_Label_SinColor_Advertencia_Ejercicio,
                                                                                                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha,
                                                                                                        0);

                    //Rellenar Grids
                    Rellenar_DataGrid_AlbaranLinea();
                    Actualizar_ImportesImpuestos(true, false);

                    //Recargar lsitado arbolsecundario
                    g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.RecargarSeleccionNodo();

                    #region Anexo
                    //Desbloquear provincia
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id > -1)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Enabled = true;
                    }

                    //Desbloquear Municipio
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Id > -1)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Enabled = true;
                    }

                    //Desbloquear poblacion
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Id > -1)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Enabled = true;
                    }
                    #endregion

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

                g_frm_P_AlbaranCabecera.Salir_P_Base();
            }
            finally
            {
                //Hacemos foco al primer control.
                Funciones.Poner_Foco_Objeto(g_frm_P_AlbaranCabecera, g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_PRINCIPAL_TextBox_Codigo);

                g_bol_CargarDatos_Termino = true;

                //Si no tiene Cierre
                if (g_obj_ENUM_VALIDACIONFECHAS_TIPOCIERRE.Equals(G_ENUM_VALIDACIONFECHAS_TIPOCIERRE.Ninguno))
                {
                    //Configurar Cerrar/Abrir
                    Mostrar_CerradoAbierto();
                }
                else
                {
                    //Activar o desactivar el recargo Equivalencia
                    if (g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA != null &&
                        g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA.recargo != null &&
                        g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA.recargo.Value)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Enabled = true;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Enabled = false;
                    }
                }
            }
        }

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

            try
            {
                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo = g_obj_VTA_AlbaranesCabecera_Datos.Obtener(_lng_id);

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

                        g_frm_P_AlbaranCabecera.g_obj_Funciones_Paginador.SetPaginaActual(int_PaginaDelObjeto);
                        //Asignanado al paginador la pagina actual
                        g_frm_P_AlbaranCabecera.Exferia_Paginador_AlbaranCabecera.PaginaActual = g_frm_P_AlbaranCabecera.g_obj_Funciones_Paginador.GetPaginaActual();
                    }
                    //.............................................................................................

                    //ArbolSecundarioSeleccion Identificadores Necesarios .......................................
                    //idCliente
                    g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDCLIENTE = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idCliente.Value;

                    //idArticulo (esto sera el articulo que este seleccionado en el listado, por defecto se pone -1 y en el rellenar listado se pone 
                    g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULO = -1;
                    //idArticuloComodin
                    g_frm_P_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_AlbaranCabecera.Exferia_ArbolSecundarioSeleccion_IDARTICULOCOMODIN = -1;
                    //...........................................................................................

                    //NumeroDocumento
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_NumeroDocumento.Text = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.numeroAlbaran.ToString();

                    //Descripcion
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Descripcion.Text = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.descripcion;
                    
                    //Delegaciones 
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Delegaciones.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Delegaciones.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Delegaciones.descripcion;
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Delegaciones.fechaBorrado;

                    //FormaPago 
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_FormasPago.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_FormasPago.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_FormasPago.descripcion;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_FormasPago.fechaBorrado;

                    //Fecha
                    g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha.ToString("dd/MM/yyyy");
                    g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_FechaEmpresa(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idEmpresa);

                    //Cliente 
                    g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes.razonSocial;
                    g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes.fechaBorrado;
                    g_bol_Recargo_SEGUNCLIENTE = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes.recargo != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes.recargo.Value : false;
                    g_mdl_MAE_Clientes = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes;

                    //Moneda 
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Monedas.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Monedas.moneda;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Monedas.descripcion;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Monedas.fechaBorrado;

                    //ImpuestoCabecera
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_ImpuestosCabecera.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_ImpuestosCabecera.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_ImpuestosCabecera.descripcion;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_ImpuestosCabecera.fechaBorrado;

                    //Descuento Final albaran
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_DescuentoFinalAlbaran.Text = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.descuentoFinalAlbaran != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.descuentoFinalAlbaran.Value.ToString() : "";

                    //Empleado
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Empleados != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Empleados.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Empleados.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Empleados.nombre;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Empleados.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //Vendedor (PREVENTA)
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_Preventa != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores.nombre;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //Vendedor (PREVENTA HABITUAL)
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_PreventaHabitual != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores1.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores1.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores1.nombre;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores1.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //Vendedor (REPARTIDOR)
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_Repartidor != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores2.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores2.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores2.nombre;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores2.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //Vendedor (COBRADOR)
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_Cobrador != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores3.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores3.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores3.nombre;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores3.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //Vendedor (COBRADOR HABITUAL)
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_CobradorHabitual != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores4.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores4.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores4.nombre;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores4.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //Vendedor (AUTOVENTA)
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_Autoventa != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores5.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores5.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores5.nombre;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores5.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //Referencia
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Referencia.Text = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.referencia;

                    //PredefinidaCabecera (Albaran)
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idPredefinidoCabecera_Albaran != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_PredefinidosCabeceras.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_PredefinidosCabeceras.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_PredefinidosCabeceras.descripcion;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_PredefinidosCabeceras.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //PredefinidaCabecera (servicio)
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idPredefinidoCabecera_Servicios != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_PredefinidosCabeceras1.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_PredefinidosCabeceras1.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_PredefinidosCabeceras1.descripcion;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_PredefinidosCabeceras1.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //ClaveAnalitca
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idClaveAnalitica != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_ClavesAnaliticas.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_ClavesAnaliticas.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_ClavesAnaliticas.descripcion;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.CTA_ClavesAnaliticas.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //Recargo
                    g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Checked = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.recargo != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.recargo.Value : false;

                    //Observaciones
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Observaciones.Text = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.observaciones;

                    #region  Servicios(VTA_AlbaranesCabecera_Anexos)

                    g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_RELACIONADOS_Padre_ID = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idCliente.Value;
                    
                    //Datos para la pantalla de mantenimiento
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo = new List<INTERNO_Filtro_OpcionPadre_Modelo>();
                    lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MAE_CLIENTE, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idCliente.Value));
                    g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Objeto_ParaEnviarAMantenimiento = lst_INTERNO_Filtro_OpcionPadre_Modelo;
                    
                    //Desbloquear Controles
                    g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Enabled = true;
                    
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idRelacionClienteProveedor != null)
                    {
                        //Rellenar el Modelo
                        g_mdl_SRV_Relacion_ClienteProveedor = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.SRV_Relacion_ClienteProveedor;

                        // ## BUSCAR LOS ARTICULOS DEL SERVICIO #########################################################################################
                        //Cargamos el ensamblado
                        Assembly m_assembly2 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                        //Obtenemos el tipo de la clase
                        Type m_type2 = m_assembly2.GetType("" + Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                        //creamos la instancia
                        var obj_Clase2 = Activator.CreateInstance(m_type2);
                        //Cargamos el metodo solicitado
                        MethodInfo obj_MethodInfo2 = obj_Clase2.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEARTICULOS_OBTENER_IDS_PARASERVICIO, BindingFlags.Instance | BindingFlags.NonPublic);

                        //Obtener valores
                        object[] arr_Parametros2 = { g_mdl_SRV_Relacion_ClienteProveedor.idProveedor, g_mdl_SRV_Relacion_ClienteProveedor.idAgrupacionArticuloCabecera, g_mdl_SRV_Relacion_ClienteProveedor.idAgrupacionArticuloLinea };

                        //Pasamos los parametros al metodo y lo ejecutamos
                        g_lst_Ids_Articulos_Servicio = (List<long>)obj_MethodInfo2.Invoke(obj_Clase2, arr_Parametros2);

                        //F3_Servicio
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.SRV_Relacion_ClienteProveedor.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.SRV_Relacion_ClienteProveedor.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.SRV_Relacion_ClienteProveedor.descripcion;
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.SRV_Relacion_ClienteProveedor.fechaBorrado;

                        g_frm_P_AlbaranCabecera.Panel_Servicio.Visible = true;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_FechaBorrado = null;

                        g_frm_P_AlbaranCabecera.Panel_Servicio.Visible = false;
                    }

                    //Anexos
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos != null)
                    {
                        VTA_AlbaranesCabecera_Anexos mdl_VTA_AlbaranesCabecera_Anexos=g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos.FirstOrDefault();

                        if (mdl_VTA_AlbaranesCabecera_Anexos != null)
                        {
                            //NumeroDocumentoManual
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroDocumentoManual.Text = mdl_VTA_AlbaranesCabecera_Anexos.numeroDocumentoManual;

                            //NumeroPedidoCliente
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroPedidoCliente.Text = mdl_VTA_AlbaranesCabecera_Anexos.numeroPedidoCliente;

                            //Identicket
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Identicket.Text = mdl_VTA_AlbaranesCabecera_Anexos.identicket;

                            //Seccion
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Seccion.Text = mdl_VTA_AlbaranesCabecera_Anexos.seccion;

                            //Departamento
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Departamento.Text = mdl_VTA_AlbaranesCabecera_Anexos.departamento;

                            //cliente
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Cliente.Text = mdl_VTA_AlbaranesCabecera_Anexos.cliente;

                            //direccion
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Direccion.Text = mdl_VTA_AlbaranesCabecera_Anexos.direccion;

                            //pais
                            if (mdl_VTA_AlbaranesCabecera_Anexos.GEN_Paises != null)
                            {
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Paises.id;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Codigo = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Paises.codigo_ISO2D;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Descripcion = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Paises.descripcion;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_FechaBorrado = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Paises.fechaBorrado;

                                //Poner Filtro
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_RELACIONADOS_Padre_OPCION = Variables.G_STR_OPCION_GEN_PAIS;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_RELACIONADOS_Padre_ID = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id;
                            }
                            else
                            {
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id = -1;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Codigo = "";
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Descripcion = "";
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_FechaBorrado = null;
                            }

                            //provincia
                            if (mdl_VTA_AlbaranesCabecera_Anexos.GEN_Provincias != null)
                            {
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Id = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Provincias.id;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Codigo = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Provincias.codigo;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Descripcion = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Provincias.descripcion;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_FechaBorrado = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Provincias.fechaBorrado;

                                //Poner Filtro
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_RELACIONADOS_Padre_OPCION = Variables.G_STR_OPCION_GEN_PROVINCIA;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_RELACIONADOS_Padre_ID = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Id;
                            }
                            else
                            {
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Id = -1;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Codigo = "";
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Descripcion = "";
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_FechaBorrado = null;
                            }

                            //municipio
                            if (mdl_VTA_AlbaranesCabecera_Anexos.GEN_Municipios != null)
                            {
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Id = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Municipios.id;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Codigo = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Municipios.codigoAEAT;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Descripcion = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Municipios.descripcion;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_FechaBorrado = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Municipios.fechaBorrado;

                                //Poner Filtro
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_RELACIONADOS_Padre_OPCION = Variables.G_STR_OPCION_GEN_MUNICIPIO;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_RELACIONADOS_Padre_ID = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Id;
                            }
                            else
                            {
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Id = -1;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Codigo = "";
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Descripcion = "";
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_FechaBorrado = null;
                            }
                            //poblacion
                            if (mdl_VTA_AlbaranesCabecera_Anexos.GEN_Poblaciones != null)
                            {
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Id = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Poblaciones.id;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Codigo = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Poblaciones.codigo;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Descripcion = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Poblaciones.descripcion;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_FechaBorrado = mdl_VTA_AlbaranesCabecera_Anexos.GEN_Poblaciones.fechaBorrado;
                            }
                            else
                            {
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Id = -1;
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Codigo = "";
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Descripcion = "";
                                g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_FechaBorrado = null;
                            }

                            //codigoPostal
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_CodigoPostal.Text = mdl_VTA_AlbaranesCabecera_Anexos.codigoPostal;

                            //nif
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_CIFNIF_Anexo_NIF.Exferia_TextBox_CIFNIF_Valor = mdl_VTA_AlbaranesCabecera_Anexos.nif;

                            //telefono1
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono1.Text = mdl_VTA_AlbaranesCabecera_Anexos.telefono_1;

                            //telefono2
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono2.Text = mdl_VTA_AlbaranesCabecera_Anexos.telefono_2;

                            //fax
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Fax.Text = mdl_VTA_AlbaranesCabecera_Anexos.fax;

                            //observaciones
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Observaciones.Text = mdl_VTA_AlbaranesCabecera_Anexos.observaciones;
                        }
                    }
                    #endregion

                    //DatosViaje
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_DatosViaje != null)
                    {
                        VTA_AlbaranesCabecera_DatosViaje mdl_VTA_AlbaranesCabecera_DatosViaje = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_DatosViaje.FirstOrDefault();

                        if (mdl_VTA_AlbaranesCabecera_DatosViaje != null)
                        {
                            if (mdl_VTA_AlbaranesCabecera_DatosViaje.fechaCarga != null)
                            {
                                g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_DatosViaje_FechaCarga.Exferia_FechaSeleccion_Fecha = mdl_VTA_AlbaranesCabecera_DatosViaje.fechaCarga.Value.ToString("dd/MM/yyyy");
                            }

                            //NumeroDocumentoManual
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaVehiculo.Text = mdl_VTA_AlbaranesCabecera_DatosViaje.matriculaVehiculo;

                            //NumeroPedidoCliente
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaRemolque.Text = mdl_VTA_AlbaranesCabecera_DatosViaje.matriculaRemolque;

                            //Identicket
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Origen.Text = mdl_VTA_AlbaranesCabecera_DatosViaje.origen;
                           
                            //Seccion
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Destino.Text = mdl_VTA_AlbaranesCabecera_DatosViaje.destino;

                            //Departamento
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Referencia.Text = mdl_VTA_AlbaranesCabecera_DatosViaje.referencia;
                        }
                    }

                    //Listado de Impuesto y Totales 
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Resumen != null &&
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Resumen.Count > 0)
                    {
                        foreach (VTA_AlbaranesCabecera_Resumen mdl_VTA_AlbaranesCabecera_Resumen in g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Resumen)
                        {
                            g_lst_INTERNO_ImportesImpuestos_Modelo.Add(new INTERNO_ImportesImpuestos_Modelo(mdl_VTA_AlbaranesCabecera_Resumen.idImpuestoTipo,
                                                                                                            (mdl_VTA_AlbaranesCabecera_Resumen.GEN_ImpuestosTipos != null ? mdl_VTA_AlbaranesCabecera_Resumen.GEN_ImpuestosTipos.descripcion : ""),
                                                                                                            mdl_VTA_AlbaranesCabecera_Resumen.idImpuestoLinea,
                                                                                                            mdl_VTA_AlbaranesCabecera_Resumen.bruto,
                                                                                                            0m,
                                                                                                            0m,
                                                                                                            (mdl_VTA_AlbaranesCabecera_Resumen.descuentoFinalAlbaran_Valor!=null ? mdl_VTA_AlbaranesCabecera_Resumen.descuentoFinalAlbaran_Valor.Value : 0m),
                                                                                                            mdl_VTA_AlbaranesCabecera_Resumen.baseImponible,
                                                                                                            mdl_VTA_AlbaranesCabecera_Resumen.impuesto_Porcentaje,
                                                                                                            mdl_VTA_AlbaranesCabecera_Resumen.impuesto_Valor,
                                                                                                            mdl_VTA_AlbaranesCabecera_Resumen.recargo_Porcentaje,
                                                                                                            mdl_VTA_AlbaranesCabecera_Resumen.recargo_Valor,
                                                                                                            mdl_VTA_AlbaranesCabecera_Resumen.total,
                                                                                                            false
                                                                                                            ));
                        }
                    }


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

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

                            //numeroDocumento
                            if (str_campo.Equals(nameof(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.numeroAlbaran)))
                            {
                                str_MenuSuperior_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.numeroAlbaran.ToString();
                            }
                            //descripcion
                            else if (str_campo.Equals(nameof(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.descripcion)))
                            {
                                str_MenuSuperior_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.descripcion.ToString();
                            }
                        }
                        if (str_ValorAMostrarFinal != "")
                        {
                            g_frm_P_AlbaranCabecera.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_AlbaranCabecera.Tag.ToString(), str_MenuSuperior_Codigo);

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

            return bol_ValorDevuelto;
        }
        #endregion

        #region Grabar Datos
        public void GrabarDatos()
        {
            try
            {
                g_bol_GrabarDatos_TerminoCorrectamente = true;

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

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_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_AlbaranCabecera_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_AlbaranCabecera_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_AlbaranCabecera.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);

                        //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_AlbaranCabecera, mdl_ValorDevuelto_Modelo_Resultado.Objeto);

                            //Si tuviera valor se cambia
                            if (mdl_ValorDevuelto_Modelo_Resultado.Valor_Anterior != null)
                            {
                                g_bol_Termino_CargaDatos_Inicial = false;
                                Funciones.Poner_Valor_Objeto(mdl_ValorDevuelto_Modelo_Resultado.Objeto, mdl_ValorDevuelto_Modelo_Resultado.Valor_Anterior);
                                g_bol_Termino_CargaDatos_Inicial = true;
                            }
                        }
                    }
                }
                else
                {
                    //Instanciar la clase de Calculos
                    g_obj_VentasCompras_Impuestos_Calculos = new VentasCompras_Impuestos_Calculos(Variables.G_INT_TIPOCLIENTEPROVEEDOR_CLIENTE_CODIGO,
                                                                                                  g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idCliente.Value,
                                                                                                  g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha,
                                                                                                  g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idEmpresa);

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

                    //Poner el Foco Inicial
                    Funciones.Poner_Foco_Objeto(g_frm_P_AlbaranCabecera, g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_PRINCIPAL_TextBox_Codigo);
                    g_bol_ModificacionDatosAfectaLineas = false;
                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;

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

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

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

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

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

                // Si hay El Cliente validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // La Forma de pago no puede estar Vacio (Obligatorio)
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay  Forma de pago validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // El ImpuestoCabecera no puede estar Vacio (Obligatorio)
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay El ImpuestoCabecera validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

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

                //TAB OTROS
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo=ValidarDatos_Otros();
                }

                // Si hay la PredefinidoCabecera Albaran validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay El PredefinidoCabecera servicio validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

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

                // Si hay El Servicio validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // La fecha no puede estar vacia y debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

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

                //Si el Numero documento esta vacio y se intenta buscar el ultimo numerico por delegacion y ejercicio y llego al limite de base de datos
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    if (g_frm_P_AlbaranCabecera.Exferia_TextBox_NumeroDocumento.Text.Trim().Length == 0)
                    {
                        INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_AUX = Buscar_CodigoSiguiente();

                        if (mdl_INTERNO_ValorDevuelto_Modelo_AUX.TodoCorrecto == false)
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = mdl_INTERNO_ValorDevuelto_Modelo_AUX.Mensaje;
                            mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_TextBox_NumeroDocumento;
                        }
                    }
                }

                // Numero de docmento no puede estar Repetido
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_AUX = Buscar_CodigoRepetido();

                    if (mdl_INTERNO_ValorDevuelto_Modelo_AUX.TodoCorrecto == false)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = mdl_INTERNO_ValorDevuelto_Modelo_AUX.Mensaje;
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_TextBox_NumeroDocumento;
                    }
                }

                //TAB DATOSVIAJE
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = ValidarDatos_DatosViaje();
                }
                
                //TAB ANEXOS
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = ValidarDatos_Anexo_Y_Servicio();
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(ValidarDatos));

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

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

            //Iniciar transaccion
            using (TransactionScope obj_TransactionScope = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    VTA_AlbaranesCabecera mdl_VTA_AlbaranesCabecera = new VTA_AlbaranesCabecera();
                    long lng_idAlbaranCabecera = -1;
                    DateTime? dtt_Nula = null;
                    //id
                    mdl_VTA_AlbaranesCabecera.id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id : -1;

                    //numeroAlbaran 
                    mdl_VTA_AlbaranesCabecera.numeroAlbaran = long.Parse(g_frm_P_AlbaranCabecera.Exferia_TextBox_NumeroDocumento.Text);

                    //Delegacion ..................................................................................
                    mdl_VTA_AlbaranesCabecera.idDelegacion = g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Id;

                    //Formapago ..................................................................................
                    mdl_VTA_AlbaranesCabecera.idFormaPago = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Id;

                    //idEmpresa...........................................................................................
                    if ((g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idEmpresa : -1) != -1)
                    {
                        mdl_VTA_AlbaranesCabecera.idEmpresa = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idEmpresa;
                    }
                    else
                    {
                        //Buscar el idEmpresa que Corresponda
                        mdl_VTA_AlbaranesCabecera.idEmpresa = Datos_Generales.GEN_Empresas_Devolver_IdEmpresa_AGrabar(g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.lng_idEmpresa, nameof(VTA_AlbaranesCabecera));
                    }

                    //fecha
                    mdl_VTA_AlbaranesCabecera.fecha = DateTime.ParseExact(g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                    GEN_EjerciciosActivos_Empresa mdl_GEN_EjerciciosActivos_Empresa = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_FechaEmpresa(mdl_VTA_AlbaranesCabecera.fecha, mdl_VTA_AlbaranesCabecera.idEmpresa);

                    // descripcion (Si no exite nada en descripcion se pone Empresa/Ejercicio/Delegacion/Nº Documento)
                    if (g_frm_P_AlbaranCabecera.Exferia_TextBox_Descripcion.Text.Trim().Length == 0)
                    {
                        mdl_VTA_AlbaranesCabecera.descripcion = g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales.str_Empresa_Codigo + "/" +
                                                                    (mdl_GEN_EjerciciosActivos_Empresa != null ? mdl_GEN_EjerciciosActivos_Empresa.anioControl : "") + "/" +
                                                                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Codigo + "/" +
                                                                    g_frm_P_AlbaranCabecera.Exferia_TextBox_NumeroDocumento.Text;
                    }
                    else
                    {
                        mdl_VTA_AlbaranesCabecera.descripcion = g_frm_P_AlbaranCabecera.Exferia_TextBox_Descripcion.Text.Trim();
                    }

                    //guid
                    mdl_VTA_AlbaranesCabecera.guid = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.guid : null;

                    //Estado
                    mdl_VTA_AlbaranesCabecera.estado = g_str_Estado;

                    //Cliente ..................................................................................
                    mdl_VTA_AlbaranesCabecera.idCliente = g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Id;

                    //Moneda ..................................................................................
                    mdl_VTA_AlbaranesCabecera.idMoneda = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Id;

                    //Impuesto Cabecera ..................................................................................
                    mdl_VTA_AlbaranesCabecera.idImpuestoCabecera = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Id;

                    //RelacionClienteProveedor ..................................................................................
                    mdl_VTA_AlbaranesCabecera.idRelacionClienteProveedor = null;

                    // Descuento final albaran
                    if (g_frm_P_AlbaranCabecera.Exferia_TextBox_DescuentoFinalAlbaran.Text.Trim().Length > 0)
                    {
                        mdl_VTA_AlbaranesCabecera.descuentoFinalAlbaran = decimal.Parse(g_frm_P_AlbaranCabecera.Exferia_TextBox_DescuentoFinalAlbaran.Text.Trim());
                    }
                    else
                    {
                        mdl_VTA_AlbaranesCabecera.descuentoFinalAlbaran = null;
                    }

                    //Empleado ..................................................................................
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_AlbaranesCabecera.idEmpleado = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_AlbaranesCabecera.idEmpleado = null; }

                    //Vendedor (Preventa) ..................................................................................
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_AlbaranesCabecera.idVendedor_Preventa = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_AlbaranesCabecera.idVendedor_Preventa = null; }

                    //Vendedor (Preventa habitual) ..................................................................................
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_AlbaranesCabecera.idVendedor_PreventaHabitual = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_AlbaranesCabecera.idVendedor_PreventaHabitual = null; }

                    //Vendedor (Repartidor) ..................................................................................
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_AlbaranesCabecera.idVendedor_Repartidor = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_AlbaranesCabecera.idVendedor_Repartidor = null; }

                    //Vendedor (Cobrador) ..................................................................................
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_AlbaranesCabecera.idVendedor_Cobrador = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_AlbaranesCabecera.idVendedor_Cobrador = null; }

                    //Vendedor (Cobrador habitual) ..................................................................................
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_AlbaranesCabecera.idVendedor_CobradorHabitual = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_AlbaranesCabecera.idVendedor_CobradorHabitual = null; }

                    //Vendedor (Autoventa) ..................................................................................
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_AlbaranesCabecera.idVendedor_Autoventa = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_AlbaranesCabecera.idVendedor_Autoventa = null; }

                    // Referencia
                    mdl_VTA_AlbaranesCabecera.referencia = g_frm_P_AlbaranCabecera.Exferia_TextBox_Referencia.Text;

                    //PredefinidoCabecera (Albaran) ..................................................................................
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_AlbaranesCabecera.idPredefinidoCabecera_Albaran = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Albaran.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_AlbaranesCabecera.idPredefinidoCabecera_Albaran = null; }

                    //PredefinidoCabecera (servicios)..................................................................................
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_AlbaranesCabecera.idPredefinidoCabecera_Servicios = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClavePredefinida_Servicios.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_AlbaranesCabecera.idPredefinidoCabecera_Servicios = null; }

                    //ClaveAnalitica ..................................................................................
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_AlbaranesCabecera.idClaveAnalitica = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_AlbaranesCabecera.idClaveAnalitica = null; }

                    //Servicio ..................................................................................
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Id != -1)
                    { mdl_VTA_AlbaranesCabecera.idRelacionClienteProveedor = g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Id; }
                    else
                    { mdl_VTA_AlbaranesCabecera.idRelacionClienteProveedor = null; }

                    //Recargo ..................................................................................
                    mdl_VTA_AlbaranesCabecera.recargo = g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Checked;

                    // Observaciones
                    mdl_VTA_AlbaranesCabecera.observaciones = g_frm_P_AlbaranCabecera.Exferia_TextBox_Observaciones.Text.Trim();

                    //totales
                    if (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null)
                    {
                        //total_bruto
                        mdl_VTA_AlbaranesCabecera.total_bruto = g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Bruto;

                        //total_baseImponible
                        mdl_VTA_AlbaranesCabecera.total_baseImponible = g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.BaseImponible;

                        //total_impuesto
                        mdl_VTA_AlbaranesCabecera.total_impuesto = g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Impuesto_Calculado;

                        //total_recargo
                        mdl_VTA_AlbaranesCabecera.total_recargo = g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Recargo_Calculado;

                        //total_descuentoFinalAlbaran
                        mdl_VTA_AlbaranesCabecera.total_descuentoFinalAlbaran = g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.DescuentoAlbaranFinal_Calculado;

                        //total
                        mdl_VTA_AlbaranesCabecera.total = g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Total;
                    }
                    else
                    {
                        //total_bruto
                        mdl_VTA_AlbaranesCabecera.total_bruto = 0;

                        //total_baseImponible
                        mdl_VTA_AlbaranesCabecera.total_baseImponible = 0;

                        //total_impuesto
                        mdl_VTA_AlbaranesCabecera.total_impuesto = 0;

                        //total_recargo
                        mdl_VTA_AlbaranesCabecera.total_recargo = 0;

                        //total_descuentoFinalAlbaran
                        mdl_VTA_AlbaranesCabecera.total_descuentoFinalAlbaran = 0;

                        //total
                        mdl_VTA_AlbaranesCabecera.total = 0;
                    }

                    // GRABAR
                    mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_Datos.Grabar(mdl_VTA_AlbaranesCabecera);

                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        // Obtenemos el idAlbaranCabecera
                        lng_idAlbaranCabecera = mdl_INTERNO_ValorDevuelto_Modelo.Id;

                        #region Anexos 
                        //Si hay algo relleno en los objetos de Anexo, se inserta o modifica
                        if (g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroDocumentoManual.Text.Trim().Length > 0 ||
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroPedidoCliente.Text.Trim().Length > 0 ||
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Identicket.Text.Trim().Length > 0 ||
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Seccion.Text.Trim().Length > 0 ||
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Departamento.Text.Trim().Length > 0 ||
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Cliente.Text.Trim().Length > 0 ||
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Direccion.Text.Trim().Length > 0 ||
                            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id > -1 ||
                            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Id > -1 ||
                            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Id > -1 ||
                            g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Id > -1 ||
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_CodigoPostal.Text.Trim().Length > 0 ||
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_CIFNIF_Anexo_NIF.Exferia_TextBox_CIFNIF_Valor.Trim().Length > 0 ||
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono1.Text.Trim().Length > 0 ||
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono2.Text.Trim().Length > 0 ||
                            g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Observaciones.Text.Trim().Length > 0 
                            )
                        {

                            //Rellenar modelo de Anexos
                            VTA_AlbaranesCabecera_Anexos mdl_VTA_AlbaranesCabecera_Anexos = new VTA_AlbaranesCabecera_Anexos();

                            //idAlbaranCabecera
                            mdl_VTA_AlbaranesCabecera_Anexos.idAlbaranCabecera = lng_idAlbaranCabecera;
                            
                            //numeroDocumentoManual
                            mdl_VTA_AlbaranesCabecera_Anexos.numeroDocumentoManual = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroDocumentoManual.Text;
                            
                            //numeroPedidoCliente
                            mdl_VTA_AlbaranesCabecera_Anexos.numeroPedidoCliente = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroPedidoCliente.Text;
                            
                            //identicket
                            mdl_VTA_AlbaranesCabecera_Anexos.identicket = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Identicket.Text;
                            
                            //seccion
                            mdl_VTA_AlbaranesCabecera_Anexos.seccion = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Seccion.Text;
                            
                            //departamento
                            mdl_VTA_AlbaranesCabecera_Anexos.departamento = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Departamento.Text;

                            //cliente
                            mdl_VTA_AlbaranesCabecera_Anexos.cliente = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Cliente.Text.Trim();

                            //direccion
                            mdl_VTA_AlbaranesCabecera_Anexos.direccion = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Direccion.Text.Trim();

                            //idPais
                            if (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id > -1)
                            {
                                mdl_VTA_AlbaranesCabecera_Anexos.idPais = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id;
                            }
                            else
                            {
                                mdl_VTA_AlbaranesCabecera_Anexos.idPais = null;
                            }

                            //idProvincia
                            if (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Id > -1)
                            {
                                mdl_VTA_AlbaranesCabecera_Anexos.idProvincia = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Id;
                            }
                            else
                            {
                                mdl_VTA_AlbaranesCabecera_Anexos.idProvincia = null;
                            }

                            //idMunicipio
                            if (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Id > -1)
                            {
                                mdl_VTA_AlbaranesCabecera_Anexos.idMunicipio = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Id;
                            }
                            else
                            {
                                mdl_VTA_AlbaranesCabecera_Anexos.idMunicipio = null;
                            }

                            //idPoblacion
                            if (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Id > -1)
                            {
                                mdl_VTA_AlbaranesCabecera_Anexos.idPoblacion = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Id;
                            }
                            else
                            {
                                mdl_VTA_AlbaranesCabecera_Anexos.idPoblacion = null;
                            }

                            //codigoPostal
                            mdl_VTA_AlbaranesCabecera_Anexos.codigoPostal = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_CodigoPostal.Text.Trim();

                            //nif
                            mdl_VTA_AlbaranesCabecera_Anexos.nif = g_frm_P_AlbaranCabecera.Exferia_TextBox_CIFNIF_Anexo_NIF.Exferia_TextBox_CIFNIF_Valor.Trim().Length > 0 ? g_frm_P_AlbaranCabecera.Exferia_TextBox_CIFNIF_Anexo_NIF.Exferia_TextBox_CIFNIF_Valor.Trim() : "";

                            //observaciones
                            mdl_VTA_AlbaranesCabecera_Anexos.observaciones = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Observaciones.Text.Trim();

                            //telefono_1
                            mdl_VTA_AlbaranesCabecera_Anexos.telefono_1 = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono1.Text.Trim();

                            //telefono_2
                            mdl_VTA_AlbaranesCabecera_Anexos.telefono_2 = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono2.Text.Trim();

                            //fax
                            mdl_VTA_AlbaranesCabecera_Anexos.fax = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Fax.Text.Trim();

                            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Anexos_GRABAR = g_obj_VTA_AlbaranesCabecera_Anexos_Datos.Grabar(mdl_VTA_AlbaranesCabecera_Anexos);
                            if (mdl_ValorDevuelto_Modelo_Anexos_GRABAR.TodoCorrecto == false)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_Anexos_GRABAR;
                            }
                        }
                        //Si no hay ningun valor en los objetos de Anexo se Borra
                        else if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null &&
                                 g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos != null &&
                                 g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos.FirstOrDefault() != null)
                        {

                            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Anexos_Borrar = g_obj_VTA_AlbaranesCabecera_Anexos_Datos.Borrar(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos.FirstOrDefault().id);
                            if (mdl_ValorDevuelto_Modelo_Anexos_Borrar.TodoCorrecto == false)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_Anexos_Borrar;
                            }
                        }
                        #endregion

                        #region Datos Viaje 
                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            //Si hay algo relleno en los objetos de Datos Viaje , se inserta o modifica
                            if (g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_DatosViaje_FechaCarga.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ||
                                g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaVehiculo.Text.Trim().Length > 0 ||
                                g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaRemolque.Text.Trim().Length > 0 ||
                                g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Origen.Text.Trim().Length > 0 ||
                                g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Destino.Text.Trim().Length > 0 ||
                                g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Referencia.Text.Trim().Length > 0)
                            {

                                //Rellenar modelo de Datos Viaje 
                                VTA_AlbaranesCabecera_DatosViaje mdl_VTA_AlbaranesCabecera_DatosViaje = new VTA_AlbaranesCabecera_DatosViaje();

                                //fechaCarga
                                if (g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_DatosViaje_FechaCarga.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "")
                                {
                                    mdl_VTA_AlbaranesCabecera_DatosViaje.fechaCarga = DateTime.ParseExact(g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_DatosViaje_FechaCarga.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                }
                                else
                                {
                                    mdl_VTA_AlbaranesCabecera_DatosViaje.fechaCarga = dtt_Nula;
                                }
                                //idAlbaranCabecera
                                mdl_VTA_AlbaranesCabecera_DatosViaje.idAlbaranCabecera = lng_idAlbaranCabecera;
                                //matriculaVehiculo
                                mdl_VTA_AlbaranesCabecera_DatosViaje.matriculaVehiculo = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaVehiculo.Text;
                                //matriculaRemolque
                                mdl_VTA_AlbaranesCabecera_DatosViaje.matriculaRemolque = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaRemolque.Text;
                                //origen
                                mdl_VTA_AlbaranesCabecera_DatosViaje.origen = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Origen.Text;
                                //destino
                                mdl_VTA_AlbaranesCabecera_DatosViaje.destino = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Destino.Text;
                                //referencia
                                mdl_VTA_AlbaranesCabecera_DatosViaje.referencia = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Referencia.Text;

                                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_DatosViaje_GRABAR = g_obj_VTA_AlbaranesCabecera_DatosViaje_Datos.Grabar(mdl_VTA_AlbaranesCabecera_DatosViaje);
                                if (mdl_ValorDevuelto_Modelo_DatosViaje_GRABAR.TodoCorrecto == false)
                                {
                                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_DatosViaje_GRABAR;
                                }
                            }
                            //Si no hay ningun valor en los objetos de Datos Viaje  se Borra
                            else if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null &&
                                     g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_DatosViaje != null &&
                                     g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_DatosViaje.FirstOrDefault() != null)
                            {

                                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_DatosViaje_Borrar = g_obj_VTA_AlbaranesCabecera_DatosViaje_Datos.Borrar(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_DatosViaje.FirstOrDefault().id);
                                if (mdl_ValorDevuelto_Modelo_DatosViaje_Borrar.TodoCorrecto == false)
                                {
                                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_DatosViaje_Borrar;
                                }
                            }
                        }
                        #endregion

                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            obj_TransactionScope.Complete();
                        }
                    }

                    //Liberar transaccion
                    obj_TransactionScope.Dispose();

                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        //Obtener el modelo que se acaba de grabar
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo = g_obj_VTA_AlbaranesCabecera_Datos.Obtener(lng_idAlbaranCabecera);

                        g_frm_P_AlbaranCabecera.P_Base_id = lng_idAlbaranCabecera;

                        //Recargar
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_Descripcion.Text = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.descripcion;

                        //Si tienes Permisos para Borrar
                        g_frm_P_AlbaranCabecera.Exferia_Button_Borrar.Enabled = true;
                    }
                }
                catch (Control_Errores)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
                    obj_TransactionScope.Dispose();
                }
                catch (Exception ex)
                {
                    Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(GrabarDatos_Final));
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
                    obj_TransactionScope.Dispose();
                }
                finally
                {
                    //Liberar transaccion
                    obj_TransactionScope.Dispose();
                }
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        #endregion

        #region Borrar Datos
        public void BorrarDatos()
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_AlbaranCabecera.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.Show();
                }
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                g_frm_P_AlbaranCabecera.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_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_AlbaranCabecera_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_AlbaranCabecera_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_AlbaranCabecera.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_AlbaranCabecera.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, G_ENUM_TIPOACCION.INT_ELIMINAR);
                    }
                    else if (g_frm_P_AlbaranCabecera.P_Base_F3Origen != null)
                    {
                        g_frm_P_AlbaranCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, G_ENUM_TIPOACCION.INT_ELIMINAR);
                    }

                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
                    g_frm_P_AlbaranCabecera.Salir_P_Base();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_Completed));
            }
        }

        private INTERNO_ValorDevuelto_Modelo BorrarDatos_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_Datos.Borrar(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id : -1);
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(BorrarDatos_Final));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region AlbaranesLinea

        #region Rellenar DataGrid AlbaranLinea
        public void Rellenar_DataGrid_AlbaranLinea()
        {
            try
            {

                if (g_TareaAsincrona_Rellenar_DataGrid_AlbaranLinea!=null)
                {
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLinea.CancelAsync();
                    while (g_TareaAsincrona_Rellenar_DataGrid_AlbaranLinea.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLinea = new BackgroundWorker();
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLinea.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_AlbaranLinea_DoWork);
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLinea.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_AlbaranLinea_ProgressChanged);
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLinea.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_AlbaranLinea_Completed);
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLinea.WorkerReportsProgress = true;
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLinea.WorkerSupportsCancellation = true;
                }
              

                //Vaciar el Listado
                g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows.Clear();
                g_int_TotalRegistrosInsertados_AlbaranLinea = 0;
                g_int_TotalRegistros_AlbaranLinea = 0;
                g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_AlbaranLinea;
                g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_AlbaranLinea;
                g_frm_P_AlbaranCabecera.Exferia_Label_SinColor_TotalImporte_Valor.Text = "0,00";

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_AlbaranLinea.RunWorkerAsync();
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Rellenar_DataGrid_AlbaranLinea));
            }
        }

        private void TareaAsincrona_Rellenar_DataGrid_AlbaranLinea_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_Filtradas = Filtrar_AlbaranLinea();

                if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_Filtradas != null && lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_Filtradas.Count > 0)
                {
                    //Total
                    g_int_TotalRegistros_AlbaranLinea = lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_Filtradas.Count;

                    //Recorrer campos Long_Text para saber si lo pongo tipo text o tipo long
                    foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_AlbaranLineas_Columnas.Where(m => m.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT)).ToList())
                    {
                        int int_HayTextos = lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_Filtradas.Select(m => m.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(m)).ToList().Where(m => !Funciones.IsNumeric(m.ToString())).Count();

                        if (int_HayTextos > 0)
                        {
                            mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato = G_ENUM_TIPOSDATOS.TEXT;

                            g_obj_ABS_Listado_VTA_AlbaranesFacturasLineas_Albaranes.LISTADO_COLUMNAS().Where(m => m.Key.Equals(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna)).FirstOrDefault().Value.TipoDato = G_ENUM_TIPOSDATOS.TEXT;
                        }
                    }

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

                        //Progreso
                        g_int_TotalRegistrosInsertados_AlbaranLinea += 1;


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

                        //Esperar un poco
                        Thread.Sleep(1);
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_AlbaranLinea_DoWork));
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_AlbaranLinea_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_AlbaranLinea_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Añadir Linea al DataGrid de AlbaranLinea
                g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows.Add((DataGridViewRow)e.UserState);

                //Barra de Progreso
                g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_AlbaranLinea;
                g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_AlbaranLinea;

            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_AlbaranLinea_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!e.Cancelled)
            {
                g_frm_P_AlbaranCabecera.Ordenar_DataGridView_AlbaranLinea();
            }
        }

        public DataGridViewRow Transformar_Modelo_A_Row_AlbaranLinea(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas);
            }

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

                    long? lng_valor = long.Parse(str_Valor);
                    if (lng_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                    }
                }
                else
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo, null);
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        public List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo> Filtrar_AlbaranLinea()
        {
            //Filtros Avanzados
            if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null)
            {
                if (g_dct_ListadoFiltros_VTA_AlbaranesFacturasLineas != null && g_dct_ListadoFiltros_VTA_AlbaranesFacturasLineas.Count > 0)
                {
                    return g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AsQueryable().Where(Funciones_Lambda.Formar_EmpresionLambda_Filtrado<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo>(g_dct_ListadoFiltros_VTA_AlbaranesFacturasLineas, g_obj_ABS_Listado_VTA_AlbaranesFacturasLineas_Albaranes)).ToList();
                }
                else
                {
                    return g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AsQueryable().ToList();
                }
            }
            else
            {
                return null;
            }
        }
        #endregion

        public void Actualizar_Registro_AlbaranLinea(long _lng_idAlbaranFacturaLinea, G_ENUM_TIPOACCION _enum_TipoAccion, bool _bol_RecargarComentarios,bool _bol_Recargar_ImportesImpuestos, bool _bol_Recargar_Trazabilidad)
        {
            try
            {
                //Buscar el Registro en Base de datos
                INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = g_obj_VTA_AlbaranesFacturasLineas_Datos.Obtener_Registro_Para_Listado_Por_Id(_lng_idAlbaranFacturaLinea);

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

                        g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Add(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo);
                    }

                    //Poner los campos tipo Texto y long
                    foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_AlbaranLineas_Columnas.Where(m => m.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT)).ToList())
                    {
                        int int_HayTextos = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Select(m => m.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(m)).ToList().Where(m => !Funciones.IsNumeric(m.ToString())).Count();

                        if (int_HayTextos > 0)
                        {
                            mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato = G_ENUM_TIPOSDATOS.TEXT;

                            g_obj_ABS_Listado_VTA_AlbaranesFacturasLineas_Albaranes.LISTADO_COLUMNAS().Where(m => m.Key.Equals(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna)).FirstOrDefault().Value.TipoDato = G_ENUM_TIPOSDATOS.TEXT;
                        }
                    }

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

                        if (row != null)//Modificada
                        {
                            //Actualizar el Grid
                            Transformar_Modelo_A_Row_AlbaranLinea(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo, row);
                        }
                    }
                    //Insertar
                    else if (_enum_TipoAccion.Equals(G_ENUM_TIPOACCION.INT_INSERTAR))
                    {
                        g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows.Add(Transformar_Modelo_A_Row_AlbaranLinea(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo, null));

                        //Sumar Cantidad de Lineas Insertadas
                        g_int_TotalRegistros_AlbaranLinea += 1;
                        g_int_TotalRegistrosInsertados_AlbaranLinea += 1;

                        g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_AlbaranLinea;
                        g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_AlbaranLinea;
                    }

                    //Actualizar el Importe
                    if (_bol_Recargar_ImportesImpuestos)
                    {
                        Actualizar_ImportesImpuestos(false, false);
                    }

                    //Actualiazr el listado de las lineas, para poder cogerlas desde la pantalla de AlbaranLinea
                    if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                        g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                    {
                        g_frm_P_AlbaranCabecera.P_Base_Objetos_Listado = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idAlbaranFacturaLinea_Padre == null).Select(m => new INTERNO_Listado_CamposClave_Modelo
                        {
                            ID = m.id,
                            ID_Aux1 = (m.idArticulo!=null ? m.idArticulo.Value : -1),
                            Dato_Auxiliar = (m.Articulo_Codigo + " - " + m.Articulo_Descripcion),
                            ID_Aux2 = (m.idArticuloComodin != null ? m.idArticuloComodin.Value : -1),
                            Dato_Auxiliar2 = (m.ArticuloComodin_Codigo + " - " + m.descripcionArticuloComodin)
                        }).ToList();
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.P_Base_Objetos_Listado = null;
                    }

                    if (_bol_RecargarComentarios)
                    {
                        //Si la linea es la seleccionada se actualiza los comentarios
                        if (g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows.Count > 0 &&
                            g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.SelectedRows.Count > 0 &&
                            long.Parse(g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.SelectedRows[0].Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)].Value.ToString())== _lng_idAlbaranFacturaLinea)
                        {
                            Rellenar_DataGrid_AlbaranLineasComentarios(_lng_idAlbaranFacturaLinea);
                        }
                    }

                    if (_bol_Recargar_Trazabilidad)
                    {
                        //Si la linea es la seleccionada se actualiza los comentarios
                        if (g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows.Count > 0 &&
                            g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.SelectedRows.Count > 0 &&
                            long.Parse(g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.SelectedRows[0].Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)].Value.ToString()) == _lng_idAlbaranFacturaLinea)
                        {
                            Rellenar_DataGrid_AlbaranLineaTrazabilidad(_lng_idAlbaranFacturaLinea);
                        }
                    }
                }

                //Si tiene Lineas Bloqueo la Delegacion (Porque las lineas tiene almacenes que depende de la delegacion)
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Enabled = false;
                }
                else
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Enabled = true;
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_Registro_AlbaranLinea));
            }

        }
        public void Borrar_Registro_AlbaranLinea(List<long> _lst_idAlbaranLinea)
        {
            try
            {
                // 1 º LINEA PRINCIPAL ################################################################################
                //Borrar primero el List<> General 
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                {
                    List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => _lst_idAlbaranLinea.Contains(m.id)).ToList();
                    if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA != null && lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA.Count > 0)
                    {
                        foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA)
                        {
                            g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Remove(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo);
                        }



                        //Borrar del DataGridView
                        List<DataGridViewRow> lst_DataGridViewRow = g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows
                                        .Cast<DataGridViewRow>()
                                        .Where(r => _lst_idAlbaranLinea.Contains(long.Parse(r.Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)].Value.ToString()))).ToList();

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

                        //Restar Cantidad de Lineas Borradas
                        g_int_TotalRegistros_AlbaranLinea -= lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA.Count();
                        g_int_TotalRegistrosInsertados_AlbaranLinea = g_int_TotalRegistrosInsertados_AlbaranLinea - lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA.Count();

                        g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_AlbaranLinea;
                        g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_AlbaranLinea;
                    }

                    //2º LINEA RELACONADA ####################################################################################################
                    //Borrar primero el List<> General 
                    if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                    {
                        List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA_RELACIONADA = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idAlbaranFacturaLinea_Padre != null && _lst_idAlbaranLinea.Contains(m.idAlbaranFacturaLinea_Padre.Value)).ToList();
                        if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA_RELACIONADA != null && lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA_RELACIONADA.Count > 0)
                        {
                            foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA_RELACIONADA)
                            {
                                g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Remove(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo);
                            }
                        }


                        //Borrar del DataGridView
                        List<DataGridViewRow> lst_DataGridViewRow = g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows
                                        .Cast<DataGridViewRow>()
                                        .Where(r => r.Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idAlbaranFacturaLinea_Padre)].Value != null && _lst_idAlbaranLinea.Contains(long.Parse(r.Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idAlbaranFacturaLinea_Padre)].Value.ToString()))).ToList();

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

                        //Restar Cantidad de Lineas Borradas
                        g_int_TotalRegistros_AlbaranLinea -= lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA_RELACIONADA.Count();
                        g_int_TotalRegistrosInsertados_AlbaranLinea = g_int_TotalRegistrosInsertados_AlbaranLinea - lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA_RELACIONADA.Count();

                        g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_AlbaranLinea;
                        g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_AlbaranLinea;
                    }


                    Actualizar_ImportesImpuestos(false, false);

                    //Actualiazr el listado de las lineas, para poder cogerlas desde la pantalla de AlbaranLinea
                    if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                        g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                    {
                        g_frm_P_AlbaranCabecera.P_Base_Objetos_Listado = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idAlbaranFacturaLinea_Padre == null).Select(m => new INTERNO_Listado_CamposClave_Modelo
                        {
                            ID = m.id,
                            ID_Aux1 = (m.idArticulo != null ? m.idArticulo.Value : -1),
                            Dato_Auxiliar = (m.Articulo_Codigo + " - " + m.Articulo_Descripcion),
                            ID_Aux2 = (m.idArticuloComodin != null ? m.idArticuloComodin.Value : -1),
                            Dato_Auxiliar2 = (m.ArticuloComodin_Codigo + " - " + m.descripcionArticuloComodin)
                        }).ToList();
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.P_Base_Objetos_Listado = null;
                    }
                }

                //Si tiene Lineas Bloqueo la Delegacion (Porque las lineas tiene almacenes que depende de la delegacion)
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Enabled = false;
                }
                else
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Enabled = true;
                }

                g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Borrar_Registro_AlbaranLinea));
            }
        }

        #region Borrar Datos en Base Datos AlbaranLinea
        public void Borrar_Registro_AlbaranLinea_EnBaseDatos(List<long> _lst_idAlbaranLinea_ABorrar, List<long> _lst_idAlbaranLinea_ABorrar_RELACIONADOS)
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_AlbaranCabecera.Enabled = false;
                    g_bol_Borrar_Registro_AlbaranLinea_EnBaseDatos_TerminoCorrectamente = false;
                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_BORRANDODATOS());

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

                    g_TareaAsincrona_Borrar_Registro_AlbaranLinea_EnBaseDatos = new BackgroundWorker();
                    g_TareaAsincrona_Borrar_Registro_AlbaranLinea_EnBaseDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_Borrar_Registro_AlbaranLinea_EnBaseDatos_DoWork);
                    g_TareaAsincrona_Borrar_Registro_AlbaranLinea_EnBaseDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Borrar_Registro_AlbaranLinea_EnBaseDatos_Completed);
                    g_TareaAsincrona_Borrar_Registro_AlbaranLinea_EnBaseDatos.RunWorkerAsync(lst_Argumentos);

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

                g_frm_P_AlbaranCabecera.Enabled = true;
                g_bol_Borrar_Registro_AlbaranLinea_EnBaseDatos_TerminoCorrectamente = true;

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Borrar_Registro_AlbaranLinea_EnBaseDatos));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA());
            }
        }

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

            //Iniciar transaccion
            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue))
            {
                try
                {
                    List<long> lst_idAlbaranLinea_BORRADAS = new List<long>();

                    //Argumentos
                    List<object> lst_Argumentos = (List<object>)e.Argument;
                    List<long> lst_idAlbaranLinea_ABorrar = (List<long>)lst_Argumentos[0];
                    List<long> lst_idAlbaranLinea_ABorrar_RELACIONADOS = (List<long>)lst_Argumentos[1];

                    // ## 1º BORRAR LAS LINEAS RELACIONADAS (EN PROMOCION) ###########################################################################
                    if (lst_idAlbaranLinea_ABorrar_RELACIONADOS != null && lst_idAlbaranLinea_ABorrar_RELACIONADOS.Count > 0)
                    {
                        //Filtrar para coger solo las lineas en promocion que no esten para borrar su padre
                        List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_AUXILIAR = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => lst_idAlbaranLinea_ABorrar_RELACIONADOS.Contains(m.id)).ToList();
                        if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_AUXILIAR != null && lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_AUXILIAR.Count > 0)
                        {
                            //Filtrar con las lineas a borrar el resto
                            if (lst_idAlbaranLinea_ABorrar != null)
                            {
                                lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_AUXILIAR = lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_AUXILIAR.Where(m => m.idAlbaranFacturaLinea_Padre != null && (!lst_idAlbaranLinea_ABorrar.Contains(m.idAlbaranFacturaLinea_Padre.Value))).ToList();
                            }

                            if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_AUXILIAR != null && lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_AUXILIAR.Count > 0)
                            {
                                List<long> lst_idAlbaranLinea_RELACIONADOS_ABorrar_Final = lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_AUXILIAR.Select(M => M.id).ToList();
                                List<long> lst_idAlbaranLinea_Padre_RELACIONADOS_ABorrar_Final = lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_AUXILIAR.Select(M => M.idAlbaranFacturaLinea_Padre.Value).ToList();

                                //Desactivar la promocion (Se envia el id del padre, porque es el que tiene la promocion)
                                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_PROMOCIONPORUNIDAD_DESACTIVAR = g_obj_VTA_AlbaranesFacturasLineas_TarifasPromociones_Datos.Desactivar(lst_idAlbaranLinea_Padre_RELACIONADOS_ABorrar_Final);
                                if (mdl_ValorDevuelto_Modelo_PROMOCIONPORUNIDAD_DESACTIVAR.TodoCorrecto == false)
                                {
                                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                                }


                                //Borrar la linea
                                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                                {
                                    INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_PROMOCIONPORUNIDAD_BORRAR = Borrar_Registro_AlbaranLinea_EnBaseDatos_Final(lst_idAlbaranLinea_RELACIONADOS_ABorrar_Final);
                                    if (mdl_ValorDevuelto_Modelo_PROMOCIONPORUNIDAD_BORRAR.TodoCorrecto == false)
                                    {
                                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                                    }
                                    else
                                    {
                                        lst_idAlbaranLinea_BORRADAS.AddRange(lst_idAlbaranLinea_RELACIONADOS_ABorrar_Final);
                                    }
                                }
                            }

                        }
                    }

                    // ## 2º BORRAR EL RESTO DE LAS LINEAS #################################################################################################
                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        if (lst_idAlbaranLinea_ABorrar != null && lst_idAlbaranLinea_ABorrar.Count>0)
                        {
                            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_BORRAR = Borrar_Registro_AlbaranLinea_EnBaseDatos_Final(lst_idAlbaranLinea_ABorrar);
                            if (mdl_ValorDevuelto_Modelo_BORRAR.TodoCorrecto == false)
                            {
                                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                            }
                            else
                            {
                                lst_idAlbaranLinea_BORRADAS.AddRange(lst_idAlbaranLinea_ABorrar);
                            }
                        }
                    }


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

                    transaccion_SQL.Dispose();

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

                    Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_Registro_AlbaranLinea_EnBaseDatos_DoWork));

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

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

                    Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_Registro_AlbaranLinea_EnBaseDatos_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_Borrar_Registro_AlbaranLinea_EnBaseDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_AlbaranCabecera.Enabled = true;
            g_bol_Borrar_Registro_AlbaranLinea_EnBaseDatos_TerminoCorrectamente = true;
            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

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

                    //Listado lineas
                    lst_obj.Add(mdl_ValorDevuelto_Modelo_Resultado.Listado_Id);

                    //Primer numero de linea borrado
                    lst_obj.Add(g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.id.Equals(mdl_ValorDevuelto_Modelo_Resultado.Listado_Id.OrderBy(x => x).FirstOrDefault())).FirstOrDefault().numeroLineaAlbaran);

                    g_frm_P_AlbaranCabecera.P_Base_ActualizarRegistro_ConObjeto(lst_obj, G_ENUM_TIPOACCION.INT_ELIMINAR);

                    g_frm_P_AlbaranCabecera.Linea_CambioSeleccion();

                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_Registro_AlbaranLinea_EnBaseDatos_Completed));
            }
            finally
            {
                //Poner el Foco Inicial
                Funciones.Poner_Foco_Objeto(g_frm_P_AlbaranCabecera, g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_PRINCIPAL_TextBox_Codigo);
            }
        }

        private INTERNO_ValorDevuelto_Modelo Borrar_Registro_AlbaranLinea_EnBaseDatos_Final(List<long> _lst_idAlbaranLinea_ABorrar)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;


            try
            {
                if (_lst_idAlbaranLinea_ABorrar != null && _lst_idAlbaranLinea_ABorrar.Count > 0)
                {
                    foreach (long lng_idAlbaranLineaABorrar in _lst_idAlbaranLinea_ABorrar)
                    {
                        INTERNO_VTA_AlbaranesFacturasLineas_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo = g_obj_VTA_AlbaranesFacturasLineas_Datos.Obtener_Para_Borrar(lng_idAlbaranLineaABorrar);

                        if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo != null && mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo != null)
                        {
                            #region ACTUALIZAR ARTICULO MOVIMIENTOS DIARIO 

                            #region Rellenar modelo
                            INTERNO_ArticuloDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = new INTERNO_ArticuloDiarioActualizar_Documentos_Modelo();

                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                            //Datos Actuales
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo.Value;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idAlmacen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idUbicacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Actual = 0;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = 0;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.operacion;

                            //Datos Anteriores
                            if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo != null)
                            {
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Modificacion = true;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticuloComodin_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticuloComodin;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idAlmacen;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idUbicacion;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.cantidad;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.segundaUnidad_cantidad;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.relacion;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.operacion;
                            }
                            else
                            {
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Modificacion = false;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticuloComodin_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = "";
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Anterior = "";
                            }
                            #endregion

                            mdl_INTERNO_ValorDevuelto_Modelo = Funciones_ArticuloMovimientosDiario.Actualizar_ArticuloMovimientoDiario(mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo);

                            #endregion

                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                #region ACTUALIZAR ARTICULO TRAZABILIDAD MOVIMIENTOS DIARIO 
                                //Buscar la Linea
                                INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.id.Equals(lng_idAlbaranLineaABorrar)).FirstOrDefault();

                                if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                                    mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX != null &&
                                    mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX.Count>0)
                                {
                                    foreach (INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo in mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX)
                                    {
                                        #region Rellenar modelo
                                        INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo = new INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo();

                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                                        //Datos Actuales
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo.Value;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idAlmacen;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idUbicacion;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Actual = 0;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = 0;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.relacion;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.operacion;

                                        //Datos Anteriores
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Modificacion = true;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idAlmacen;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idUbicacion;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.cantidad;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.segundaUnidad_cantidad;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.relacion;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.operacion;

                                        #endregion

                                        mdl_INTERNO_ValorDevuelto_Modelo = Funciones_ArticuloTrazabilidadMovimientosDiario.Actualizar_ArticuloTrazabilidadMovimientoDiario(mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo);
                                    }
                                    
                                }
                                #endregion

                                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                                {
                                    if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion != null)
                                    {
                                        #region ACTUALIZAR ARTICULO MOVIMIENTOS DIARIO 

                                        #region Rellenar modelo
                                        INTERNO_ArticuloDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR = new INTERNO_ArticuloDiarioActualizar_Documentos_Modelo();

                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                                        //Datos Actuales
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idArticulo.Value;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Fecha_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdDelegacion_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idAlmacen;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idUbicacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Cantidad_Actual = 0;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Cantidad_SegundaUnidad_Actual = 0;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.relacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.operacion;

                                        //Datos Anteriores
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Modificacion = true;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdArticuloComodin_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idArticuloComodin;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idArticulo;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idAlmacen;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idUbicacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.GEN_TiposCompraVenta.opcion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.cantidad;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.segundaUnidad_cantidad;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.relacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.operacion;

                                        #endregion

                                        mdl_INTERNO_ValorDevuelto_Modelo = Funciones_ArticuloMovimientosDiario.Actualizar_ArticuloMovimientoDiario(mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR);

                                        #endregion

                                        #region ACTUALIZAR ARTICULO TRAZABILIDAD MOVIMIENTOS DIARIO 
                                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                                        {
                                            //Buscar la Linea
                                            INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.id.Equals(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.id)).FirstOrDefault();

                                            if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION != null &&
                                                mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.AlbaranesFacturasLineas_Trazabilidad_AUX != null &&
                                                mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.AlbaranesFacturasLineas_Trazabilidad_AUX.Count > 0)
                                            {
                                                foreach (INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo in mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.AlbaranesFacturasLineas_Trazabilidad_AUX)
                                                {
                                                    #region Rellenar modelo
                                                    INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo = new INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo();

                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                                                    //Datos Actuales
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idArticulo.Value;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idAlmacen;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idUbicacion;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Actual = 0;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = 0;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.GEN_TiposCompraVenta.opcion;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.relacion;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.operacion;

                                                    //Datos Anteriores
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Modificacion = true;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idArticulo;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idAlmacen;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idUbicacion;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.GEN_TiposCompraVenta.opcion;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.cantidad;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.segundaUnidad_cantidad;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.relacion;
                                                    mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.operacion;

                                                    #endregion

                                                    mdl_INTERNO_ValorDevuelto_Modelo = Funciones_ArticuloTrazabilidadMovimientosDiario.Actualizar_ArticuloTrazabilidadMovimientoDiario(mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo);
                                                }
                                            }
                                        }
                                        #endregion
                                    }
                                }
                            }
                        }

                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesFacturasLineas_Datos.Borrar(lng_idAlbaranLineaABorrar);
                        }
                    }
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Borrar_Registro_AlbaranLinea_EnBaseDatos_Final));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Reordenar NumeroLinea
        public void Reordenar_NumeroLineas_AlbaranLinea(long _lng_idAlbaranLinea_Modificada, int _int_NumeroLinea_Modificado)
        {
            try
            {
                //Se usa el dictionary para actualizar los registros en base de datos
                Dictionary<long, int> dct_IdAlbaranLinea_NumeroLinea = new Dictionary<long, int>();

                //Ver si hay alguna linea ya creada
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                {

                    //Sumarle 1 a todos los registros que sean iguales o superior al numero de linea del registro modificado, sin cogerlo a el
                    g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => (!m.id.Equals(_lng_idAlbaranLinea_Modificada)) && m.numeroLineaAlbaran >= _int_NumeroLinea_Modificado).ToList().ForEach(x => x.numeroLineaAlbaran += 1);

                    //Reordenar los registros
                    int int_NumeroLinea = _int_NumeroLinea_Modificado;
                    //El listado no se cogen los registros que esten en promocion
                    foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(x => x.numeroLineaAlbaran >= _int_NumeroLinea_Modificado && x.idAlbaranFacturaLinea_Padre == null).OrderBy(m => m.numeroLineaAlbaran))
                    {
                        //Linea Principal
                        mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.numeroLineaAlbaran = int_NumeroLinea;
                        //Actualizar el DataGridView
                        DataGridViewRow row = g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows
                                     .Cast<DataGridViewRow>()
                                     .Where(r => r.Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)].Value.Equals(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)).FirstOrDefault();

                        if (row != null)
                        {
                            //Actualizar el Grid
                            Transformar_Modelo_A_Row_AlbaranLinea(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo, row);
                        }
                        //Rellenar el Diccionario
                        dct_IdAlbaranLinea_NumeroLinea.Add(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id, int_NumeroLinea);
                        int_NumeroLinea += 1;

                        //Ver si tiene Lineas Asociadas
                        INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ASOCIADA = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idAlbaranFacturaLinea_Padre != null && m.idAlbaranFacturaLinea_Padre.Value.Equals(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)).FirstOrDefault();
                        if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ASOCIADA != null)
                        {
                            mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ASOCIADA.numeroLineaAlbaran = int_NumeroLinea;
                            //Actualizar el DataGridView
                            DataGridViewRow row_Asociada = g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows
                                         .Cast<DataGridViewRow>()
                                         .Where(r => r.Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)].Value.Equals(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ASOCIADA.id)).FirstOrDefault();

                            if (row_Asociada != null)
                            {
                                //Actualizar el Grid
                                Transformar_Modelo_A_Row_AlbaranLinea(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ASOCIADA, row_Asociada);
                            }

                            //Rellenar el Diccionario
                            dct_IdAlbaranLinea_NumeroLinea.Add(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ASOCIADA.id, int_NumeroLinea);
                            int_NumeroLinea += 1;
                        }
                    }


                    //Actualizar base de datos
                    if (dct_IdAlbaranLinea_NumeroLinea.Count > 0)
                    {
                        g_obj_VTA_AlbaranesFacturasLineas_Datos.Actualizar_NumeroLineaAlbaran(dct_IdAlbaranLinea_NumeroLinea);
                    }


                    //Ordenar el DataGridView AlbaranesFacturasLineas
                    g_frm_P_AlbaranCabecera.Ordenar_DataGridView_AlbaranLinea();

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

        #region Lineas Actualizar
        private INTERNO_ValorDevuelto_Modelo Actualizar_LineasRecalculadas(MAE_Clientes _mdl_Cliente_Seleccionado,
                                                                           decimal _dcm_DescuentoGeneral,
                                                                           DateTime _dtt_FechaSeleccionada,
                                                                           decimal _dcm_ImporteFinal,
                                                                           BackgroundWorker _obj_BackgroundWorker)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";

            try
            {
                List<VTA_AlbaranesFacturasLineas> lst_VTA_AlbaranesFacturasLineas_AGRABAR = new List<VTA_AlbaranesFacturasLineas>();

                //Recorrer linea a linea
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                    g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                {
                    int int_NumeroLinea = 1;

                    List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_SINLINEASPROMOCIONES = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idAlbaranFacturaLinea_Padre == null).ToList();

                    //Mensaje de recalculando ............................................................................................................
                    _obj_BackgroundWorker.ReportProgress(3, Mensajes.G_STR_ESPERANDO_RECALCULANDO_REGISTROSLISTADO());
                    //Vaciar el total cargado de lineas
                    _obj_BackgroundWorker.ReportProgress(2, 0);
                    //Total de lineas
                    _obj_BackgroundWorker.ReportProgress(1, lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_SINLINEASPROMOCIONES.Count);
                    //.....................................................................................................................................


                    int int_Contador = 0;
                    foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_SINLINEASPROMOCIONES.OrderBy(m => m.numeroLineaAlbaran))
                    {
                        //Rellenar la Clase para calculos
                        VentasCompras_Calculos obj_VentasCompras_Calculos = new VentasCompras_Calculos(Variables.G_INT_TIPOCLIENTEPROVEEDOR_CLIENTE_CODIGO,
                                                                                                        _mdl_Cliente_Seleccionado.id,
                                                                                                        _dtt_FechaSeleccionada,
                                                                                                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idEmpresa,
                                                                                                        _dcm_DescuentoGeneral);
                        long lng_idArticulo_ArticuloComodin = -1;
                        bool bol_EsArticuloComodin = false;
                        decimal? dcm_Precio_ArticuloComodin = null;
                        if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo != null &&
                            mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo.Value > -1)
                        {
                            lng_idArticulo_ArticuloComodin = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo.Value;
                        }
                        else if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticuloComodin != null &&
                                 mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticuloComodin.Value > -1)
                        {
                            lng_idArticulo_ArticuloComodin = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticuloComodin.Value;
                            bol_EsArticuloComodin = true;
                            dcm_Precio_ArticuloComodin = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.precio;
                        }

                        //Recalcular todo segun cliente y fecha nuevos
                        obj_VentasCompras_Calculos.Cambio_ClienteProveedorFecha(lng_idArticulo_ArticuloComodin,
                                                                                bol_EsArticuloComodin,
                                                                                dcm_Precio_ArticuloComodin,
                                                                                mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idEmbalaje,
                                                                                mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.TipoCompraVenta_Opcion,
                                                                                mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idTipoCompraVenta,
                                                                                mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.cantidad,
                                                                                mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.segundaUnidad_cantidad);

                        //es linea a Grabar
                        VTA_AlbaranesFacturasLineas mdl_VTA_AlbaranesFacturasLineas = AlbaranesFacturasLineas_AGrabar(obj_VentasCompras_Calculos,
                                                                                                                     mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo,
                                                                                                                     ref int_NumeroLinea);
                        //Agregar al listado final
                        lst_VTA_AlbaranesFacturasLineas_AGRABAR.Add(mdl_VTA_AlbaranesFacturasLineas);


                        //Sumar al contador
                        int_Contador += 1;

                        //Añadir linea al progreessbar .............................
                        _obj_BackgroundWorker.ReportProgress(2, int_Contador);
                        //..........................................................
                    }
                }

                try
                {
                    // 1º ACTUALIZAMOS EL idCliente en la Cabecera
                    //Mensaje de recalculando ............................................................................................
                    _obj_BackgroundWorker.ReportProgress(3, Mensajes.G_STR_ESPERANDO_ACTUALIZANDO_REGISTROCABECERA("cliente"));
                    //Vaciar el total cargado de lineas
                    _obj_BackgroundWorker.ReportProgress(2, 0);
                    //Total de lineas
                    _obj_BackgroundWorker.ReportProgress(1, 0);
                    //......................................................................................................................

                    //Actualizamos el cliente
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARCABECERA = g_obj_VTA_AlbaranesCabecera_Datos.Actualizar_VariosCampos(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id,
                                                                                                                                                                _mdl_Cliente_Seleccionado.id,
                                                                                                                                                                _mdl_Cliente_Seleccionado.idImpuestoCabecera,
                                                                                                                                                                _mdl_Cliente_Seleccionado.idMoneda,
                                                                                                                                                                _mdl_Cliente_Seleccionado.idVendedor,
                                                                                                                                                                _dtt_FechaSeleccionada,
                                                                                                                                                                (_mdl_Cliente_Seleccionado.descuentoFinalAlbaran != null ? _mdl_Cliente_Seleccionado.descuentoFinalAlbaran.Value : 0m),
                                                                                                                                                                (_mdl_Cliente_Seleccionado.recargo != null ? _mdl_Cliente_Seleccionado.recargo.Value : false)
                                                                                                                                                                );
                    if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARCABECERA.TodoCorrecto)
                    {
                        // 2º BORRAMOS LINEAS ANTIGUAS 
                        //Mensaje de recalculando .............................................................................................
                        _obj_BackgroundWorker.ReportProgress(3, Mensajes.G_STR_ESPERANDO_BORRANDO_REGISTROSANTIGUOS());
                        //.....................................................................................................................

                        //Recorrer linea a linea
                        if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                            g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                        {
                            //Recorrer las lineas a Actualizar
                            foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo)
                            {
                                INTERNO_VTA_AlbaranesFacturasLineas_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo = g_obj_VTA_AlbaranesFacturasLineas_Datos.Obtener_Para_Borrar(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id);

                                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = new INTERNO_ValorDevuelto_Modelo();
                                mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto = true;
                                mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.Mensaje = "";

                                if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo != null && mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo != null)
                                {
                                    #region ACTUALIZAR ARTICULO MOVIMIENTOS DIARIO 

                                    #region Rellenar modelo
                                    INTERNO_ArticuloDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = new INTERNO_ArticuloDiarioActualizar_Documentos_Modelo();

                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                                    //Datos Actuales
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo.Value;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idAlmacen;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idUbicacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Actual = 0;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = 0;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.relacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.operacion;

                                    //Datos Anteriores
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Modificacion = true;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticuloComodin_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticuloComodin;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idAlmacen;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idUbicacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.cantidad;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.segundaUnidad_cantidad;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.relacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.operacion;
                                    #endregion

                                    mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = Funciones_ArticuloMovimientosDiario.Actualizar_ArticuloMovimientoDiario(mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo);
                                    #endregion

                                    if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                                    {
                                        #region ACTUALIZAR ARTICULO TRAZABILIDAD MOVIMIENTOS DIARIO 
                                        
                                        //Buscar la Linea
                                        if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                                            mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX != null &&
                                            mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX.Count > 0)
                                        {
                                            foreach (INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo in mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX)
                                            {
                                                #region Rellenar modelo
                                                INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo = new INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo();

                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                                                //Datos Actuales
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo.Value;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idAlmacen;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idUbicacion;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Actual = 0;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = 0;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.relacion;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.operacion;

                                                //Datos Anteriores
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Modificacion = true;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idAlmacen;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idUbicacion;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.cantidad;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.segundaUnidad_cantidad;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.relacion;
                                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.operacion;

                                                #endregion

                                                mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = Funciones_ArticuloTrazabilidadMovimientosDiario.Actualizar_ArticuloTrazabilidadMovimientoDiario(mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo);
                                            }

                                        }
                                        #endregion

                                        if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                                        {
                                            if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion != null)
                                            {
                                                #region ACTUALIZAR ARTICULO MOVIMIENTOS DIARIO EN PROMOCION

                                                #region Rellenar modelo
                                                INTERNO_ArticuloDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR = new INTERNO_ArticuloDiarioActualizar_Documentos_Modelo();

                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                                                //Datos Actuales
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idArticulo.Value;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Fecha_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdDelegacion_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idAlmacen;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idUbicacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Cantidad_Actual = 0;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Cantidad_SegundaUnidad_Actual = 0;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.relacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.operacion;

                                                //Datos Anteriores
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Modificacion = true;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdArticuloComodin_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idArticuloComodin;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idArticulo;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idAlmacen;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.idUbicacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.GEN_TiposCompraVenta.opcion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.cantidad;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.segundaUnidad_cantidad;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.relacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.operacion;

                                                #endregion

                                                mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = Funciones_ArticuloMovimientosDiario.Actualizar_ArticuloMovimientoDiario(mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION_BORRAR);
                                                #endregion

                                                #region ACTUALIZAR ARTICULO TRAZABILIDAD MOVIMIENTOS DIARIO 
                                                if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                                                {
                                                    //Buscar la Linea
                                                    INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.id.Equals(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.Linea_EnPromocion.id)).FirstOrDefault();

                                                    if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION != null &&
                                                        mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.AlbaranesFacturasLineas_Trazabilidad_AUX != null &&
                                                        mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.AlbaranesFacturasLineas_Trazabilidad_AUX.Count > 0)
                                                    {
                                                        foreach (INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo in mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.AlbaranesFacturasLineas_Trazabilidad_AUX)
                                                        {
                                                            #region Rellenar modelo
                                                            INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo = new INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo();

                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                                                            //Datos Actuales
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idArticulo.Value;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idAlmacen;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idUbicacion;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Actual = 0;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = 0;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.GEN_TiposCompraVenta.opcion;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.relacion;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.operacion;

                                                            //Datos Anteriores
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Modificacion = true;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idArticulo;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idAlmacen;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idUbicacion;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.GEN_TiposCompraVenta.opcion;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.cantidad;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.segundaUnidad_cantidad;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.relacion;
                                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.operacion;

                                                            #endregion

                                                            mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = Funciones_ArticuloTrazabilidadMovimientosDiario.Actualizar_ArticuloTrazabilidadMovimientoDiario(mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo);
                                                        }
                                                    }
                                                }
                                                #endregion
                                            }
                                        }
                                    }
                                }

                                if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                                {
                                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_BORRARLINEAS = g_obj_VTA_AlbaranesFacturasLineas_Datos.Borrar(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id);
                                    if (!mdl_INTERNO_ValorDevuelto_Modelo_BORRARLINEAS.TodoCorrecto)
                                    {
                                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = mdl_INTERNO_ValorDevuelto_Modelo_BORRARLINEAS.Mensaje;

                                        break;
                                    }
                                }
                                else
                                {
                                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.Mensaje;

                                    break;
                                }
                            }
                        }

                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            // 3º INSERTAMOS LAS LINEAS NUEVAS
                            //Mensaje de recalculando ....................................................................
                            _obj_BackgroundWorker.ReportProgress(3, Mensajes.G_STR_ESPERANDO_AGREGANDODATOS());
                            //............................................................................................

                            //Insertar lineas
                            if (lst_VTA_AlbaranesFacturasLineas_AGRABAR != null && lst_VTA_AlbaranesFacturasLineas_AGRABAR.Count > 0)
                            {
                                foreach (VTA_AlbaranesFacturasLineas mdl_VTA_AlbaranesFacturasLineas in lst_VTA_AlbaranesFacturasLineas_AGRABAR)
                                {
                                    //INSERTAR LINEA
                                    mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesFacturasLineas_Datos.Insertar(null,g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo,mdl_VTA_AlbaranesFacturasLineas);
                                    if (!mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                                    {
                                        break;
                                    }
                                }
                            }

                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                //Terminamos la transaccion
                                #region Datos Actualizados en el Modelo General
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idCliente = _mdl_Cliente_Seleccionado.id;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idImpuestoCabecera = _mdl_Cliente_Seleccionado.idImpuestoCabecera;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idMoneda = _mdl_Cliente_Seleccionado.idMoneda;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_PreventaHabitual = _mdl_Cliente_Seleccionado.idVendedor;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.descuentoFinalAlbaran = _mdl_Cliente_Seleccionado.descuentoFinalAlbaran;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.recargo = _mdl_Cliente_Seleccionado.recargo;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha = _dtt_FechaSeleccionada;

                                //Relaciones
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes = _mdl_Cliente_Seleccionado;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_ImpuestosCabecera = _mdl_Cliente_Seleccionado.GEN_ImpuestosCabecera;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Monedas = _mdl_Cliente_Seleccionado.GEN_Monedas;
                                if (_mdl_Cliente_Seleccionado.idVendedor != null)
                                {
                                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores1 = _mdl_Cliente_Seleccionado.MAE_Vendedores;
                                }
                                #endregion


                                // 5º OBTENEMOS LOS IDS DE LAS LINEAS INTRODUCIDAS
                                //Mensaje de recalculando ...................................................................................
                                _obj_BackgroundWorker.ReportProgress(3, Mensajes.G_STR_ESPERANDO_ACTUALIZANDO_REGISTROSLISTADO());
                                //...........................................................................................................

                                mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_obj_VTA_AlbaranesFacturasLineas_Datos.Obtener_IdsAlbaranFacturaLinea_PorCabecera_Albaran(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id);
                                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

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

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        private VTA_AlbaranesFacturasLineas AlbaranesFacturasLineas_AGrabar(VentasCompras_Calculos _obj_VentasCompras_Calculos,
                                                            INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo,
                                                            ref int _int_NumeroLinea)
        {
            #region LINEA PRINCIPAL



            VTA_AlbaranesFacturasLineas mdl_VTA_AlbaranesFacturasLineas = new VTA_AlbaranesFacturasLineas();
            //id
            mdl_VTA_AlbaranesFacturasLineas.id = -1;

            //idAlbaranCabecera
            mdl_VTA_AlbaranesFacturasLineas.idAlbaranCabecera = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id;

            //idArticulo
            if (_obj_VentasCompras_Calculos.PROPIEDAD_Articulo_Id > -1)
            {
                mdl_VTA_AlbaranesFacturasLineas.idArticulo = _obj_VentasCompras_Calculos.PROPIEDAD_Articulo_Id;
                mdl_VTA_AlbaranesFacturasLineas.descripcionArticuloComodin = "";
            }
            else
            {
                mdl_VTA_AlbaranesFacturasLineas.idArticulo = null;
                mdl_VTA_AlbaranesFacturasLineas.descripcionArticuloComodin = "";
            }

            //idArticuloComodin
            if (_obj_VentasCompras_Calculos.PROPIEDAD_ArticuloComodin_Id > -1)
            {
                mdl_VTA_AlbaranesFacturasLineas.idArticuloComodin = _obj_VentasCompras_Calculos.PROPIEDAD_ArticuloComodin_Id;
                mdl_VTA_AlbaranesFacturasLineas.descripcionArticuloComodin = _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.descripcionArticuloComodin;
            }
            else
            {
                mdl_VTA_AlbaranesFacturasLineas.idArticuloComodin = null;
                mdl_VTA_AlbaranesFacturasLineas.descripcionArticuloComodin = "";
            }

            //numeroLineaAlbaran
            mdl_VTA_AlbaranesFacturasLineas.numeroLineaAlbaran = _int_NumeroLinea;

            //numeroLineaFactura
            mdl_VTA_AlbaranesFacturasLineas.numeroLineaFactura = 0;

            //idAlmacen 
            mdl_VTA_AlbaranesFacturasLineas.idAlmacen = _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idAlmacen;

            //idTipoCompraVenta 
            mdl_VTA_AlbaranesFacturasLineas.idTipoCompraVenta = _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idTipoCompraVenta;
            mdl_VTA_AlbaranesFacturasLineas.GEN_TiposCompraVenta = Datos_Generales.GEN_TiposCompraVenta_Obtener_Modelo_Por_Id(_mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idTipoCompraVenta);

            //idUbicacion
            mdl_VTA_AlbaranesFacturasLineas.idUbicacion = null;

            //cantidad
            mdl_VTA_AlbaranesFacturasLineas.cantidad = _obj_VentasCompras_Calculos.PROPIEDAD_Cantidad_Principal;

            //idEmbalaje
            mdl_VTA_AlbaranesFacturasLineas.idEmbalaje = _obj_VentasCompras_Calculos.PROPIEDAD_Embalaje_Id;

            //relacion
            mdl_VTA_AlbaranesFacturasLineas.relacion = _obj_VentasCompras_Calculos.PROPIEDAD_Cantidad_Principal_Relacion;

            //operacion
            mdl_VTA_AlbaranesFacturasLineas.operacion = _obj_VentasCompras_Calculos.PROPIEDAD_Embalaje_Operacion;

            //segundaUnidad_Precio_Cantidad_SegundaUnidad
            mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_Precio_Cantidad_SegundaUnidad = _obj_VentasCompras_Calculos.PROPIEDAD_PrecioPor_SegundaUnidad_Entero;

            //segundaUnidad_relacion
            mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_relacion = _obj_VentasCompras_Calculos.PROPIEDAD_EmbalajeRelacionado_Relacion;

            //segundaUnidad_idEmbalaje
            mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_idEmbalaje = _obj_VentasCompras_Calculos.PROPIEDAD_EmbalajeRelacionado_Id;

            //segundaUnidad_cantidad
            if (_obj_VentasCompras_Calculos.PROPIEDAD_Embalaje_EsRelacional)
            {
                mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_cantidad = _obj_VentasCompras_Calculos.PROPIEDAD_Cantidad_Relacional;
            }
            else
            {
                mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_cantidad = null;
            }

            //idNomenclaturaPrecio
            mdl_VTA_AlbaranesFacturasLineas.idNomenclaturaPrecio = _obj_VentasCompras_Calculos.PROPIEDAD_NomenclaturaPrecio_Id;

            //precio
            mdl_VTA_AlbaranesFacturasLineas.precio = _obj_VentasCompras_Calculos.PROPIEDAD_Precio;

            //numeroRedondeo
            mdl_VTA_AlbaranesFacturasLineas.numeroRedondeo = _obj_VentasCompras_Calculos.PROPIEDAD_NumeroRedondeo;

            //descuentoGeneral
            mdl_VTA_AlbaranesFacturasLineas.descuentoGeneral = _obj_VentasCompras_Calculos.PROPIEDAD_DescuentoGeneral;

            //importe
            mdl_VTA_AlbaranesFacturasLineas.importe = _obj_VentasCompras_Calculos.PROPIEDAD_Importe;

            //idImpuestoTipo
            mdl_VTA_AlbaranesFacturasLineas.idImpuestoTipo = _obj_VentasCompras_Calculos.PROPIEDAD_ImpuestoTipo_Id;

            //idAlbaranLinea_Padre
            mdl_VTA_AlbaranesFacturasLineas.idAlbaranFacturaLinea_Padre = null;

            //DATOS DEL EMBALAJE PRINCIPAL DEL ARTICULO
            //embalajePrincipalDelArticulo_idEmbalaje
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_idEmbalaje = _obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_IdEmbalaje;

            //embalajePrincipalDelArticulo_relacion
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_relacion = _obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_Cantidad_Principal_Relacion;

            //embalajePrincipalDelArticulo_operacion
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_operacion = _obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_Embalaje_Operacion;

            //embalajePrincipalDelArticulo_precio
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_precio = _obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_Precio;

            //embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad = _obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_PrecioPor_SegundaUnidad_Entero;

            //embalajePrincipalDelArticulo_segundaUnidad_relacion
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_segundaUnidad_relacion = _obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Relacion;

            //embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje = _obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Id;

            _int_NumeroLinea += 1;
            #endregion

            #region COMENTARIOS
            if (_mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Comentario_AUX!=null &&
                _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Comentario_AUX.Count>0)
            {
                mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_Comentarios = new List<VTA_AlbaranesFacturasLineas_Comentarios>();

                foreach (INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo in _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Comentario_AUX)
                {
                    VTA_AlbaranesFacturasLineas_Comentarios mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR = new VTA_AlbaranesFacturasLineas_Comentarios();
                    mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR.id = -1;
                    mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR.idAlbaranFacturaLinea = -1;
                    mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR.comentario = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo.comentario;
                    mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR.mostrarImpresion = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo.mostrarImpresion;

                    //Añadir al listado
                    mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_Comentarios.Add(mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR);
                }
            }
            #endregion

            #region TARIFAS/PROMOCIONES
            mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_TarifasPromociones = Obtener_AlbaranesFacturasLineas_TarifasPromociones_Recalculadas(_obj_VentasCompras_Calculos);
            #endregion

            #region TRAZABILIDADES
            mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_Trazabilidad = Obtener_AlbaranLineas_Trazabilidades_Recalculadas(_mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo);
            #endregion

            #region LINEA PROMOCION POR UNIDAD (LINEA RELACIONAL)

            VTA_AlbaranesFacturasLineas mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD = Obtener_AlbaranesFacturasLineas_PromocionPorUnidad_Recalculadas(_obj_VentasCompras_Calculos, _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo, ref _int_NumeroLinea);

            if (mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD != null)
            {
                mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas1 = new List<VTA_AlbaranesFacturasLineas>();
                mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas1.Add(mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD);

                _int_NumeroLinea += 1;
            }
            #endregion

            return mdl_VTA_AlbaranesFacturasLineas;
        }

        public List<VTA_AlbaranesFacturasLineas_Trazabilidad> Obtener_AlbaranLineas_Trazabilidades_Recalculadas(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo)
        {
            List<VTA_AlbaranesFacturasLineas_Trazabilidad> lst_VTA_AlbaranesFacturasLineas_Trazabilidad = new List<VTA_AlbaranesFacturasLineas_Trazabilidad>();

            if (_mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX != null &&
                _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX.Count > 0)
            {
                foreach (INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo in _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX)
                {
                    VTA_AlbaranesFacturasLineas_Trazabilidad mdl_VTA_AlbaranesFacturasLineas_Trazabilidad = new VTA_AlbaranesFacturasLineas_Trazabilidad();

                    mdl_VTA_AlbaranesFacturasLineas_Trazabilidad.id = -1;
                    mdl_VTA_AlbaranesFacturasLineas_Trazabilidad.idArticulo_Trazabilidad = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                    mdl_VTA_AlbaranesFacturasLineas_Trazabilidad.idAlbaranFacturaLinea = -1;
                    mdl_VTA_AlbaranesFacturasLineas_Trazabilidad.cantidad = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.cantidad;
                    mdl_VTA_AlbaranesFacturasLineas_Trazabilidad.segundaUnidad_cantidad = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.segundaUnidad_cantidad;
                    mdl_VTA_AlbaranesFacturasLineas_Trazabilidad.fechaBorrado = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.fechaBorrado;

                    //Añadir al Listado
                    lst_VTA_AlbaranesFacturasLineas_Trazabilidad.Add(mdl_VTA_AlbaranesFacturasLineas_Trazabilidad);
                }
            }

            return lst_VTA_AlbaranesFacturasLineas_Trazabilidad;
        }

        public List<VTA_AlbaranesFacturasLineas_TarifasPromociones> Obtener_AlbaranesFacturasLineas_TarifasPromociones_Recalculadas(VentasCompras_Calculos _obj_VentasCompras_Calculos)
        {
            List<VTA_AlbaranesFacturasLineas_TarifasPromociones> lst_VTA_AlbaranesFacturasLineas_TarifasPromociones = new List<VTA_AlbaranesFacturasLineas_TarifasPromociones>();

            if (_obj_VentasCompras_Calculos.PROPIEDAD_TarifaPromocion_Listado_AGRABAR != null &&
                _obj_VentasCompras_Calculos.PROPIEDAD_TarifaPromocion_Listado_AGRABAR.Count > 0)
            {
                foreach (INTERNO_TarifaPromocion_VentasCompras_Modelo mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo in _obj_VentasCompras_Calculos.PROPIEDAD_TarifaPromocion_Listado_AGRABAR)
                {
                    VTA_AlbaranesFacturasLineas_TarifasPromociones mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones = new VTA_AlbaranesFacturasLineas_TarifasPromociones();

                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.id = -1;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.idAlbaranFacturaLinea = -1;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.codigo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Codigo;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descripcion = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descripcion;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_1 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_1;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_2 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_2;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_3 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_3;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_4 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_4;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_5 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_5;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.incremento = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Incremento;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.numeroRedondeo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NumeroRedondeo;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.tipo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Tipo;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.precioFijoDinamico = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_PrecioFijoDinamico != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_PrecioFijoDinamico.Value : Variables.G_INT_TIPOPRECIO_FIJO_CODIGO;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.precio = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Precio;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.idNomenclaturaPrecio = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NomenclaturaPrecio_Id;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuentoMoneda = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_DescuentoMoneda;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_A = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cantidad_A;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_B = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cantidad_B;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Porcentaje = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Porcentaje;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idArticulo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Articulo_id;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idEmbalaje = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Embalaje_id;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cancelado = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cancelado;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.orden = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Orden;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.mensaje_Error = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Mensaje_Error;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.desactivado = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Desactivado;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.noAplicarTarifa = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.NoAplicarTarifa;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.aplicadaEnLinea = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.AplicadaEnLinea;

                    //CONDICIONANTES #############################################################################################################################
                    if (mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Condicionantes != null &&
                        mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Condicionantes.Count > 0)
                    {
                        mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes = new List<VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes>();

                        foreach (INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo in mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Condicionantes)
                        {
                            VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes = new VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes();

                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.id = -1;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.idAlbaranFacturaLineaTarifaPromocion = -1;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Operador = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Desde_Operador;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Valor = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Desde_Valor;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Operador = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Hasta_Operador;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Valor = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Hasta_Valor;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.condicionante_Y_O = null;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.importe_Desde_Operador = null;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.importe_Desde_Valor = null;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.importe_Hasta_Operador = null;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.importe_Hasta_Valor = null;

                            //Añadir al listado e condicionantes
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.Add(mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes);
                        }
                    }
                    else
                    {
                        mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes = null;
                    }

                    //Añadir al Listado
                    lst_VTA_AlbaranesFacturasLineas_TarifasPromociones.Add(mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones);
                }
            }

            return lst_VTA_AlbaranesFacturasLineas_TarifasPromociones;
        }

        public VTA_AlbaranesFacturasLineas Obtener_AlbaranesFacturasLineas_PromocionPorUnidad_Recalculadas(VentasCompras_Calculos _obj_VentasCompras_Calculos, INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo, ref int _int_NumeroLinea)
        {
            VTA_AlbaranesFacturasLineas mdl_VTA_AlbaranesFacturasLineas = null;

            if (_obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Existe)
            {

                mdl_VTA_AlbaranesFacturasLineas = new VTA_AlbaranesFacturasLineas();

                //id
                mdl_VTA_AlbaranesFacturasLineas.id = -1;

                //idAlbaranCabecera
                mdl_VTA_AlbaranesFacturasLineas.idAlbaranCabecera = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id;

                //idArticulo
                mdl_VTA_AlbaranesFacturasLineas.idArticulo = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Articulo_Id;

                //numeroLineaAlbaran
                mdl_VTA_AlbaranesFacturasLineas.numeroLineaAlbaran = _int_NumeroLinea;

                //numeroLineaFactura
                mdl_VTA_AlbaranesFacturasLineas.numeroLineaFactura = 0;

                //idAlmacen 
                mdl_VTA_AlbaranesFacturasLineas.idAlmacen = _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idAlmacen;

                //idTipoCompraVenta 
                mdl_VTA_AlbaranesFacturasLineas.idTipoCompraVenta = _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idTipoCompraVenta;
                mdl_VTA_AlbaranesFacturasLineas.GEN_TiposCompraVenta = Datos_Generales.GEN_TiposCompraVenta_Obtener_Modelo_Por_Id(_mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idTipoCompraVenta);

                //idUbicacion
                mdl_VTA_AlbaranesFacturasLineas.idUbicacion = null;

                //cantidad
                mdl_VTA_AlbaranesFacturasLineas.cantidad = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Cantidad_Principal;

                //idEmbalaje
                mdl_VTA_AlbaranesFacturasLineas.idEmbalaje = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Embalaje_Id;

                //relacion
                mdl_VTA_AlbaranesFacturasLineas.relacion = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Cantidad_Principal_Relacion;

                //operacion
                mdl_VTA_AlbaranesFacturasLineas.operacion = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Embalaje_Operacion;

                //segundaUnidad_Precio_Cantidad_SegundaUnidad
                mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_Precio_Cantidad_SegundaUnidad = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_PrecioPor_SegundaUnidad_Entero;

                //segundaUnidad_relacion
                mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_relacion = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajeRelacionado_Relacion;

                //segundaUnidad_idEmbalaje
                mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_idEmbalaje = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajeRelacionado_Id;

                //segundaUnidad_cantidad
                mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_cantidad = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Cantidad_Relacional;

                //idNomenclaturaPrecio
                mdl_VTA_AlbaranesFacturasLineas.idNomenclaturaPrecio = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_NomenclaturaPrecio_Id;

                //precio
                mdl_VTA_AlbaranesFacturasLineas.precio = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Precio;

                //numeroRedondeo
                mdl_VTA_AlbaranesFacturasLineas.numeroRedondeo = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_NumeroRedondeo;

                //descuentoGeneral
                mdl_VTA_AlbaranesFacturasLineas.descuentoGeneral = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_DescuentoGeneral;

                //importe
                mdl_VTA_AlbaranesFacturasLineas.importe = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Importe;

                //idImpuestoTipo
                mdl_VTA_AlbaranesFacturasLineas.idImpuestoTipo = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_ImpuestoTipo_Id;

                //idAlbaranLinea_Padre
                mdl_VTA_AlbaranesFacturasLineas.idAlbaranFacturaLinea_Padre = -1;

                //DATOS DEL EMBALAJE PRINCIPAL DEL ARTICULO
                //embalajePrincipalDelArticulo_idEmbalaje
                mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_idEmbalaje = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_IdEmbalaje;

                //embalajePrincipalDelArticulo_relacion
                mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_relacion = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_Cantidad_Principal_Relacion;

                //embalajePrincipalDelArticulo_operacion
                mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_operacion = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_Embalaje_Operacion;

                //embalajePrincipalDelArticulo_precio
                mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_precio = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_Precio;

                //embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad
                mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_PrecioPor_SegundaUnidad_Entero;

                //embalajePrincipalDelArticulo_segundaUnidad_relacion
                mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_segundaUnidad_relacion = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Relacion;

                //embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje
                mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje = _obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Id;

                //fechaBorrado
                mdl_VTA_AlbaranesFacturasLineas.fechaBorrado = null;

                #region COMENTARIOS
                INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_LINEAENPROMOCION = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m=>m.idAlbaranFacturaLinea_Padre != null && m.idAlbaranFacturaLinea_Padre.Value.Equals(_mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id) && m.fechaBorrado == null).FirstOrDefault();
                if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_LINEAENPROMOCION != null &&
                    mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_LINEAENPROMOCION.AlbaranesFacturasLineas_Comentario_AUX != null &&
                    mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_LINEAENPROMOCION.AlbaranesFacturasLineas_Comentario_AUX.Count > 0)
                {
                    mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_Comentarios = new List<VTA_AlbaranesFacturasLineas_Comentarios>();

                    foreach (INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo in mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_LINEAENPROMOCION.AlbaranesFacturasLineas_Comentario_AUX)
                    {
                        VTA_AlbaranesFacturasLineas_Comentarios mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR = new VTA_AlbaranesFacturasLineas_Comentarios();
                        mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR.id = -1;
                        mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR.idAlbaranFacturaLinea = -1;
                        mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR.comentario = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo.comentario;
                        mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR.mostrarImpresion = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo.mostrarImpresion;

                        //Añadir al listado
                        mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_Comentarios.Add(mdl_VTA_AlbaranesFacturasLineas_Comentarios_INSERTAR);
                    }
                }
                #endregion


            }

            return mdl_VTA_AlbaranesFacturasLineas;
        }

        #endregion
        #endregion

        #region AlbaranesFacturasLineas Comentarios
        #region Rellenar DataGrid AlbaranLineasComentarios
        public void Rellenar_DataGrid_AlbaranLineasComentarios(long _lng_idAlbaranLinea)
        {
            try
            {
                if (g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios!=null)
                {
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios.CancelAsync();
                    while (g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios = new BackgroundWorker();
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios_DoWork);
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios_ProgressChanged);
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios_Completed);
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios.WorkerReportsProgress = true;
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios.WorkerSupportsCancellation = true;
                }

                //Vaciar el Listado
                g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasComentarios.Rows.Clear();

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios.RunWorkerAsync(_lng_idAlbaranLinea);
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Rellenar_DataGrid_AlbaranLineasComentarios));
            }
        }

        private void TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios_DoWork(object sender, DoWorkEventArgs e)
        {
            long lng_idAlbaranLinea = -1;

            try
            {
                lng_idAlbaranLinea = (long)e.Argument;

                //Listado de AlbaranesFacturasLineas
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                    g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                {
                    //Buscar la Linea
                    INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.id.Equals(lng_idAlbaranLinea)).FirstOrDefault();

                    if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                        mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Comentario_AUX != null)
                    {

                        //Obtener las lineas 
                        List<INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Comentario_AUX.Where(m => m.idAlbaranFacturaLinea.Equals(lng_idAlbaranLinea)).ToList();

                        if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo != null && 
                            lst_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo.Count > 0)
                        {
                            foreach (INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo in lst_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo)
                            {
                                //Se Cancelo la tarea asincrona #########################
                                if (((BackgroundWorker)sender).CancellationPending)
                                {
                                    e.Cancel = true;
                                    return;
                                }

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

                                //Esperar un poco
                                Thread.Sleep(1);
                            }
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios_DoWork));
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios_DoWork));
            }
            finally
            {
                e.Result = lng_idAlbaranLinea;
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Añadir Linea al DataGrid de LineasComentarios
                g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasComentarios.Rows.Add((DataGridViewRow)e.UserState);
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_AlbaranLineasComentarios_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!e.Cancelled)
            {
                g_frm_P_AlbaranCabecera.AlbaranesFacturasLineasComentarios_Ordenar_DataGridView();
            }
        }

        public DataGridViewRow Transformar_Modelo_A_Row_AlbaranLineasComentarios(INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasComentarios.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasComentarios);
            }

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

                    //Convertir de Texto Enriquecido a Texto plano
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna.Equals(nameof(INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo.comentario)) &&
                        str_valor != null &&
                        str_valor.Trim().Length>0)
                    {
                        if (str_valor.Trim().Substring(0, 1) == "{")
                        {
                            rtxt_Convertir.Exferia_RichTextBox_RTF = str_valor;
                            str_valor = rtxt_Convertir.Text;

                            str_valor = str_valor.Replace("\n", "\r\n");
                        }
                    }

                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = str_valor;
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        #endregion

        #region Borrar Datos en Base de Datos AlbaranLineasComentarios
        public void BorrarDatos_AlbaranLineaComentarios(List<long> _lst_idAlbaranLineaComentario_ABorrar)
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_AlbaranCabecera.Enabled = false;
                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_BORRANDODATOS());

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

                    g_TareaAsincrona_Borrar_Registro_AlbaranLineasComentarios_EnBaseDatos = new BackgroundWorker();
                    g_TareaAsincrona_Borrar_Registro_AlbaranLineasComentarios_EnBaseDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_Borrar_AlbaranLineasComentarios_DoWork);
                    g_TareaAsincrona_Borrar_Registro_AlbaranLineasComentarios_EnBaseDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Borrar_AlbaranLineasComentarios_Completed);
                    g_TareaAsincrona_Borrar_Registro_AlbaranLineasComentarios_EnBaseDatos.RunWorkerAsync(lst_Argumentos);

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

                g_frm_P_AlbaranCabecera.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(BorrarDatos_AlbaranLineaComentarios));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA());
            }
        }

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

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

                    // Borrar 
                    mdl_ValorDevuelto_Modelo = BorrarDatos_Final_AlbaranLineasComentarios(lst_idAlbaranLineaComentario_ABorrar);

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

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

                    Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_AlbaranLineasComentarios_DoWork));

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

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

                    Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_AlbaranLineasComentarios_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_Borrar_AlbaranLineasComentarios_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_AlbaranCabecera.Enabled = true;

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

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

                    //Enviar el idAlbaranLinea para que recargue el listado de AlbaranLineaComentarios
                    if (g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows.Count > 0 &&
                        g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.SelectedRows.Count > 0)
                    {
                        lst_obj.Add(long.Parse(g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.SelectedRows[0].Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Comentarios_Listado_Modelo.id)].Value.ToString()));
                    }
                    else
                    {
                        lst_obj.Add(-1);
                    }
                    g_frm_P_AlbaranCabecera.P_Base_ActualizarRegistro_ConObjeto(lst_obj, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);

                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_AlbaranLineasComentarios_Completed));
            }
            finally
            {
                //Poner el Foco Inicial
                Funciones.Poner_Foco_Objeto(g_frm_P_AlbaranCabecera, g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_PRINCIPAL_TextBox_Codigo);
            }
        }

        private INTERNO_ValorDevuelto_Modelo BorrarDatos_Final_AlbaranLineasComentarios(List<long> _lst_idAlbaranLineaComentario_ABorrar)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            try
            {
                mdl_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesFacturasLineas_Comentarios_Datos.Borrar(_lst_idAlbaranLineaComentario_ABorrar);
            }
            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_AlbaranCabecera_Controladora) + "/" + nameof(BorrarDatos_Final_AlbaranLineasComentarios));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }

            return mdl_ValorDevuelto_Modelo;
        }
        #endregion

        #endregion

        #region AlbaranesLineas Trazabilidad
        #region Rellenar DataGrid AlbaranLineaTrazabilidad
        public void Rellenar_DataGrid_AlbaranLineaTrazabilidad(long _lng_idAlbaranFacturaLinea)
        {
            try
            {
                if (g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad!=null)
                {
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad.CancelAsync();
                    while (g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad = new BackgroundWorker();
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad_DoWork);
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad_ProgressChanged);
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad_Completed);
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad.WorkerReportsProgress = true;
                    g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad.WorkerSupportsCancellation = true;
                }
               
                //Vaciar el Listado
                g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad.Rows.Clear();

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad.RunWorkerAsync(_lng_idAlbaranFacturaLinea);
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Rellenar_DataGrid_AlbaranLineaTrazabilidad));
            }
        }

        private void TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad_DoWork(object sender, DoWorkEventArgs e)
        {
            long lng_idAlbaranFacturaLinea = -1;

            try
            {
                lng_idAlbaranFacturaLinea = (long)e.Argument;

                //Listado de AlbaranesLineas
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                    g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                {
                    //Buscar la Linea
                    INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.id.Equals(lng_idAlbaranFacturaLinea)).FirstOrDefault();

                    if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                        mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX != null)
                    {

                        //Obtener las lineas de Trazabilidad
                        List<INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX.Where(m => m.idAlbaranFacturaLinea.Equals(lng_idAlbaranFacturaLinea)).ToList();

                        if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo != null && lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.Count > 0)
                        {
                            foreach (INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo in lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo)
                            {
                                //Se Cancelo la tarea asincrona #########################
                                if (((BackgroundWorker)sender).CancellationPending)
                                {
                                    e.Cancel = true;
                                    return;
                                }

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

                                //Esperar un poco
                                Thread.Sleep(1);
                            }
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad_DoWork));
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad_DoWork));
            }
            finally
            {
                e.Result = lng_idAlbaranFacturaLinea;
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Añadir Linea al DataGrid de LineasTrazabilidad
                g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad.Rows.Add((DataGridViewRow)e.UserState);
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!e.Cancelled)
            {
                g_frm_P_AlbaranCabecera.AlbaranLinea_Trazabilidad_Ordenar_DataGridView();

                try
                {
                    MostrarOcultar_Resumen_Totales_Trazabilidad((long)e.Result);

                    ArbolSecundario_Cambiar_ClienteArticulo(g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Id);
                }
                catch (Exception ex)
                {
                    Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_AlbaranLineas_Trazabilidad_Completed));
                }
            }
        }

        public DataGridViewRow Transformar_Modelo_A_Row_AlbaranLineas_Trazabilidad(INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad);
            }

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

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        #endregion

        #region Borrar Datos en Base de Datos AlbaranLineaTrazabilidad
        public void BorrarDatos_AlbaranLineasTrazabilidad(List<long> _lst_idAlbaranLineaTrazabilidad_ABorrar)
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_AlbaranCabecera.Enabled = false;
                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_BORRANDODATOS());

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

                    g_TareaAsincrona_Borrar_AlbaranLineas_Trazabilidad = new BackgroundWorker();
                    g_TareaAsincrona_Borrar_AlbaranLineas_Trazabilidad.DoWork += new DoWorkEventHandler(TareaAsincrona_Borrar_AlbaranLineas_Trazabilidad_DoWork);
                    g_TareaAsincrona_Borrar_AlbaranLineas_Trazabilidad.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Borrar_AlbaranLineas_Trazabilidad_Completed);
                    g_TareaAsincrona_Borrar_AlbaranLineas_Trazabilidad.RunWorkerAsync(lst_Argumentos);

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

                g_frm_P_AlbaranCabecera.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(BorrarDatos_AlbaranLineasTrazabilidad));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA());
            }
        }

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

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

                    // Borrar 
                    mdl_ValorDevuelto_Modelo = BorrarDatos_Final_AlbaranLineas_Trazabilidad(lst_idAlbaranFacturaLineaTrazabilidad_ABorrar);

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

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

                    Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_AlbaranLineas_Trazabilidad_DoWork));

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

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

                    Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_AlbaranLineas_Trazabilidad_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_Borrar_AlbaranLineas_Trazabilidad_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_AlbaranCabecera.Enabled = true;

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

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

                    //Enviar el idAlbaranFacturaLinea para que recargue el listado de AlbaranFacturaLineaTrazabilidad
                    if (g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows.Count > 0 &&
                        g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.SelectedRows.Count > 0)
                    {
                        lst_obj.Add(long.Parse(g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.SelectedRows[0].Cells[nameof(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)].Value.ToString()));
                    }
                    else
                    {
                        lst_obj.Add(-1);
                    }
                    g_frm_P_AlbaranCabecera.P_Base_ActualizarRegistro_ConObjeto(lst_obj, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);

                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_AlbaranLineas_Trazabilidad_Completed));
            }
            finally
            {
                //Poner el Foco Inicial
                Funciones.Poner_Foco_Objeto(g_frm_P_AlbaranCabecera, g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_PRINCIPAL_TextBox_Codigo);
            }
        }

        private INTERNO_ValorDevuelto_Modelo BorrarDatos_Final_AlbaranLineas_Trazabilidad(List<long> _lst_idAlbaranFacturaLineaTrazabilidad_ABorrar)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            try
            {

                if (_lst_idAlbaranFacturaLineaTrazabilidad_ABorrar != null && _lst_idAlbaranFacturaLineaTrazabilidad_ABorrar.Count > 0)
                {
                    foreach (long lng_idAlbaranLineaTrazabilidadABorrar in _lst_idAlbaranFacturaLineaTrazabilidad_ABorrar)
                    {
                        VTA_AlbaranesFacturasLineas_Trazabilidad mdl_VTA_AlbaranesFacturasLineas_Trazabilidad = g_obj_VTA_AlbaranesFacturasLineas_Trazabilidad_Datos.Obtener_Modelo_Por_Id(lng_idAlbaranLineaTrazabilidadABorrar);

                        if (mdl_VTA_AlbaranesFacturasLineas_Trazabilidad != null)
                        {
                            #region ACTUALIZAR ARTICULO TRAZABILIDAD MOVIMIENTOS DIARIO 
                            INTERNO_VTA_AlbaranesFacturasLineas_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo = g_obj_VTA_AlbaranesFacturasLineas_Datos.Obtener_Para_Borrar(mdl_VTA_AlbaranesFacturasLineas_Trazabilidad.idAlbaranFacturaLinea);

                            #region Rellenar modelo
                            INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo = new INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo();

                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                            //Datos Actuales
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo.Value;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Actual = mdl_VTA_AlbaranesFacturasLineas_Trazabilidad.idArticulo_Trazabilidad;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idAlmacen;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idUbicacion;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Actual = 0;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = 0;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.relacion;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.operacion;

                            //Datos Anteriores
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Modificacion = true;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Anterior = mdl_VTA_AlbaranesFacturasLineas_Trazabilidad.idArticulo_Trazabilidad;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idAlmacen;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.idUbicacion;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.GEN_TiposCompraVenta.opcion;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_VTA_AlbaranesFacturasLineas_Trazabilidad.cantidad;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_VTA_AlbaranesFacturasLineas_Trazabilidad.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.relacion;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo.operacion;
                            #endregion

                            mdl_INTERNO_ValorDevuelto_Modelo = Funciones_ArticuloTrazabilidadMovimientosDiario.Actualizar_ArticuloTrazabilidadMovimientoDiario(mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo);

                            #endregion

                        }

                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesFacturasLineas_Trazabilidad_Datos.Borrar(lng_idAlbaranLineaTrazabilidadABorrar);
                        }
                    }
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(BorrarDatos_Final_AlbaranLineas_Trazabilidad));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Totales
        private void MostrarOcultar_Resumen_Totales_Trazabilidad(long _lng_idAlbaranFacturaLinea)
        {
            try
            {
                INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = null;
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                    g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                {
                    mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.id.Equals(_lng_idAlbaranFacturaLinea)).FirstOrDefault();
                }

                bool bol_MostrarOcultar_PanelRelacional = false;
                //Mostrar o no Panel Relacional
                if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.EmbalajeRelacional != null && mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.EmbalajeRelacional != "")
                {
                    bol_MostrarOcultar_PanelRelacional = true;
                }

                //Mostrar
                if (bol_MostrarOcultar_PanelRelacional)
                {
                    g_frm_P_AlbaranCabecera.Panel_LineasTrazabilidad_ResumenTotales_Principal.Location = new Point(g_frm_P_AlbaranCabecera.Panel_LineasTrazabilidad_ResumenTotales_Principal.Location.X, g_frm_P_AlbaranCabecera.Panel_LineasTrazabilidad_ResumenTotales_Relacional.Location.Y - 42);
                    g_frm_P_AlbaranCabecera.Panel_LineasTrazabilidad_ResumenTotales_Relacional.Visible = true;
                }
                //Ocultar
                else
                {
                    g_frm_P_AlbaranCabecera.Panel_LineasTrazabilidad_ResumenTotales_Relacional.Visible = false;
                    g_frm_P_AlbaranCabecera.Panel_LineasTrazabilidad_ResumenTotales_Principal.Location = new Point(g_frm_P_AlbaranCabecera.Panel_LineasTrazabilidad_ResumenTotales_Principal.Location.X, g_frm_P_AlbaranCabecera.Panel_LineasTrazabilidad_ResumenTotales_Relacional.Location.Y);
                }

                g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad.Size = new Size(g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad.Size.Width, (g_frm_P_AlbaranCabecera.Panel_LineasTrazabilidad_ResumenTotales_Principal.Location.Y - g_frm_P_AlbaranCabecera.Exferia_DataGridView_LineasTrazabilidad.Location.Y) - 3);

                //Rellenar el Resumen de los Totales de la Trazabilidad
                Rellenar_Resumen_Totales_Trazabilidad(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "" + nameof(MostrarOcultar_Resumen_Totales_Trazabilidad));
            }
        }
        private void Rellenar_Resumen_Totales_Trazabilidad(INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo)
        {
            try
            {
                string str_TipoEmbalaje_Principal = "";
                decimal dcm_Total_Movimiento_Principal = 0;
                decimal dcm_Total_Trazado_Principal = 0;
                decimal dcm_Total_Diferencia_Principal = 0;

                string str_TipoEmbalaje_Relacionado = "";
                decimal dcm_Total_Movimiento_Relacionado = 0;
                decimal dcm_Total_Trazado_Relacionado = 0;
                decimal dcm_Total_Diferencia_Relacionado = 0;

                if (_mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null)
                {
                    //Lineas de Trazabilidad ...................................................................
                    List<INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo = null;
                    if (_mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                         _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX != null)
                    {
                        //Obtener las lineas de Trazabilidad
                        lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo = _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX.Where(m => m.idAlbaranFacturaLinea.Equals(_mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)).ToList();
                    }
                    //............................................................................................

                    //Tipos de Embalajes
                    str_TipoEmbalaje_Principal = _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.EmbalajePrincipal;

                    //Principal
                    dcm_Total_Movimiento_Principal = _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.cantidad;

                    if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo != null && lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.Count > 0)
                    {
                        dcm_Total_Trazado_Principal = lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.Sum(m => m.cantidad);
                    }
                    dcm_Total_Diferencia_Principal = dcm_Total_Movimiento_Principal - dcm_Total_Trazado_Principal;

                    //Relacionado
                    if (g_frm_P_AlbaranCabecera.Panel_LineasTrazabilidad_ResumenTotales_Relacional.Visible)
                    {
                        str_TipoEmbalaje_Relacionado = _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.EmbalajeRelacional;
                    }

                    dcm_Total_Movimiento_Relacionado = (_mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.segundaUnidad_cantidad != null ? _mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.segundaUnidad_cantidad.Value : 0m);

                    if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo != null && lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.Count > 0)
                    {
                        dcm_Total_Trazado_Relacionado = lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo.Where(m => m.segundaUnidad_cantidad != null).Sum(m => m.segundaUnidad_cantidad.Value);
                    }
                    dcm_Total_Diferencia_Relacionado = dcm_Total_Movimiento_Relacionado - dcm_Total_Trazado_Relacionado;
                }

                //Rellenar Etiquetas
                g_frm_P_AlbaranCabecera.Exferia_Label_Trazabilidad_Total_ResumenTotales_TipoEmbalaje_Principal.Text = str_TipoEmbalaje_Principal;
                g_frm_P_AlbaranCabecera.Exferia_Label_Trazabilidad_Total_ResumenTotales_Movimiento_Principal.Text = string.Format("{0:0.000}", Funciones.RedondearDecimal(dcm_Total_Movimiento_Principal, 3));
                g_frm_P_AlbaranCabecera.Exferia_Label_Trazabilidad_Total_ResumenTotales_Trazado_Principal.Text = string.Format("{0:0.000}", Funciones.RedondearDecimal(dcm_Total_Trazado_Principal, 3));
                g_frm_P_AlbaranCabecera.Exferia_Label_Trazabilidad_Total_ResumenTotales_Diferencia_Principal.Text = string.Format("{0:0.000}", Funciones.RedondearDecimal(dcm_Total_Diferencia_Principal, 3));
                g_frm_P_AlbaranCabecera.Exferia_Label_Trazabilidad_Total_ResumenTotales_TipoEmbalaje_Relacionado.Text = str_TipoEmbalaje_Relacionado;
                g_frm_P_AlbaranCabecera.Exferia_Label_Trazabilidad_Total_ResumenTotales_Movimiento_Relacionado.Text = string.Format("{0:0.000}", Funciones.RedondearDecimal(dcm_Total_Movimiento_Relacionado, 3));
                g_frm_P_AlbaranCabecera.Exferia_Label_Trazabilidad_Total_ResumenTotales_Trazado_Relacionado.Text = string.Format("{0:0.000}", Funciones.RedondearDecimal(dcm_Total_Trazado_Relacionado, 3));
                g_frm_P_AlbaranCabecera.Exferia_Label_Trazabilidad_Total_ResumenTotales_Diferencia_Relacionado.Text = string.Format("{0:0.000}", Funciones.RedondearDecimal(dcm_Total_Diferencia_Relacionado, 3));
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Rellenar_Resumen_Totales_Trazabilidad));
            }
        }
        #endregion

        public object[] Obtener_Datos_ParaTrazabilidad(long _lng_IdAlbaranFacturaLinea)
        {
            object[] arr_ObjetosADevolver = new object[1];
            arr_ObjetosADevolver[0] = null;

            try
            {
                //OBTENEMOS DATOS DE INVENTARIO_LINEA
                INTERNO_VTA_AlbaranesFacturasLineas_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo = g_obj_VTA_AlbaranesFacturasLineas_Datos.Obtener(_lng_IdAlbaranFacturaLinea);

                //Rellenar el Modelo a Devolver
                arr_ObjetosADevolver[0] = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Modelo;
            }
            catch (Control_Errores)
            {
                arr_ObjetosADevolver = null;
            }
            catch (Exception ex)
            {
                arr_ObjetosADevolver = null;
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Obtener_Datos_ParaTrazabilidad));
            }
            return arr_ObjetosADevolver;
        }
        public List<INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo> Obtener_AlbaranLineas_Trazabilidad_Listado_PorLinea(long _lng_IdAlbaranFacturaLinea)
        {
            List<INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo = null;

            try
            {
                INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(M => M.id.Equals(_lng_IdAlbaranFacturaLinea)).FirstOrDefault();
                if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                    mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX != null &&
                    mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX.Count > 0)
                {
                    //Instanciar el Listado
                    lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX.Where(m => m.idAlbaranFacturaLinea.Equals(_lng_IdAlbaranFacturaLinea)).ToList();
                }
            }
            catch (Exception ex)
            {
                lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo = null;
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Obtener_AlbaranLineas_Trazabilidad_Listado_PorLinea));
            }

            return lst_INTERNO_VTA_AlbaranesFacturasLineas_Trazabilidad_Listado_Modelo;
        }

        #endregion

        #region Actualizar Importe e Impuestos
        public void Actualizar_ImportesImpuestos(bool _bol_CargaInicial, bool _bol_ActualizarLineas_CambioImpuestos)
        {
            try
            {
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
                {
                    //## 1º--> Parar la tarea Asincrona si se estuviera ejecutando
                    if (g_TareaAsincrona_ActualizarImportes!=null)
                    {
                        g_TareaAsincrona_ActualizarImportes.CancelAsync();
                        while (g_TareaAsincrona_ActualizarImportes.IsBusy)
                        {
                            Application.DoEvents();
                        }
                    }
                    else
                    {
                        g_TareaAsincrona_ActualizarImportes = new BackgroundWorker();
                        g_TareaAsincrona_ActualizarImportes.DoWork += new DoWorkEventHandler(TareaAsincrona_ActualizarImportes_DoWork);
                        g_TareaAsincrona_ActualizarImportes.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_ActualizarImportes_ProgressChanged);
                        g_TareaAsincrona_ActualizarImportes.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_ActualizarImportes_Completed);
                        g_TareaAsincrona_ActualizarImportes.WorkerReportsProgress = true;
                        g_TareaAsincrona_ActualizarImportes.WorkerSupportsCancellation = true;
                    }
                    
                    //## 2º--> Vaciar DataGridView de resumen
                    g_frm_P_AlbaranCabecera.Exferia_DataGridView_Resumen.Rows.Clear();
                    g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES = null;
                    g_lst_INTERNO_ImportesImpuestos_Modelo = new List<INTERNO_ImportesImpuestos_Modelo>();

                    //## 4º--> Obtener el dato de Descuento Final Albaran
                    decimal dcm_DescuentoFinalAlbaran = 0m;
                    if (g_frm_P_AlbaranCabecera.Exferia_TextBox_DescuentoFinalAlbaran.Text.Trim().Length > 0)
                    {
                        dcm_DescuentoFinalAlbaran = decimal.Parse(g_frm_P_AlbaranCabecera.Exferia_TextBox_DescuentoFinalAlbaran.Text);
                    }

                    //Fecha
                    DateTime dtt_Fecha = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                    if (_bol_ActualizarLineas_CambioImpuestos)
                    {
                        //Fecha Actual Escrita
                        dtt_Fecha = DateTime.ParseExact(g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                    }

                    //Argumentos ....................................................
                    List<object> lst_Argumentos = new List<object>();
                    lst_Argumentos.Add(dcm_DescuentoFinalAlbaran);
                    lst_Argumentos.Add(dtt_Fecha);
                    lst_Argumentos.Add(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Id);
                    lst_Argumentos.Add(_bol_CargaInicial);
                    lst_Argumentos.Add(_bol_ActualizarLineas_CambioImpuestos);
                    lst_Argumentos.Add(g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Checked);

                    //(Tarea Asincrona) Cargar Datos ##################################################################
                    g_TareaAsincrona_ActualizarImportes.RunWorkerAsync(lst_Argumentos);
                    //#################################################################################################
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_ImportesImpuestos));
            }
        }

        private void TareaAsincrona_ActualizarImportes_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Objeto = 0m;
            decimal dcm_TotalImporte = 0m;
            try
            {
                //ARGUMENTOS .......................................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                //Descuento Fnal Albaran
                decimal dcm_DescuentoFinalAlbaran = (decimal)lst_Argumentos[0];
                //Fecha seleccionada
                DateTime dtt_Fecha_Seleccionada = (DateTime)lst_Argumentos[1];
                //idImpuestoCabecera Seleccionado
                long lng_idImpuestoCabecera = (long)lst_Argumentos[2];
                //Carga Inicial
                bool bol_CargaInicial = (bool)lst_Argumentos[3];
                //Actualiar el campo ImpuestoTipo de las Lineas
                bool bol_ActualizarLineas_CambioImpuestos = (bool)lst_Argumentos[4];
                //Recargo Equivalencia
                bool bol_RecargoEquivalencia = (bool)lst_Argumentos[5];
                //..................................................................................

                //## 1º--> RELLENAR MODELO DE GEN_IMPUESTOSCABECERA ########################################################################################
                // Buscar si hay que actualiazr la fecha o el idImpuestoCabecera
                if (bol_ActualizarLineas_CambioImpuestos)
                {
                    g_mdl_GEN_ImpuestosCabecera = Datos_Generales.GEN_ImpuestosCabecera_Obtener_Modelo_Por_Id(lng_idImpuestoCabecera);
                }
                // Buscar si el Modelo esta a Null
                else if (g_mdl_GEN_ImpuestosCabecera == null)
                {
                    g_mdl_GEN_ImpuestosCabecera = Datos_Generales.GEN_ImpuestosCabecera_Obtener_Modelo_Por_Id(lng_idImpuestoCabecera);
                }
                //Buscar si el idImpuestoCabecera es diferente, entre el modelo y el selccionado en el F3
                else if (g_mdl_GEN_ImpuestosCabecera != null &&
                        !g_mdl_GEN_ImpuestosCabecera.id.Equals(lng_idImpuestoCabecera))
                {
                    g_mdl_GEN_ImpuestosCabecera = Datos_Generales.GEN_ImpuestosCabecera_Obtener_Modelo_Por_Id(lng_idImpuestoCabecera);
                }

                // ## 3º--< CONVERTIR LISTADO DE LINEAS EN LISTADO DEL MODELO INTERNO_VentasComprasCalculoLineas_Modelo ####################################
                List<INTERNO_VentasCompras_Calculo_Lineas_Modelo> lst_INTERNO_VentasCompras_Calculo_Lineas_Modelo = new List<INTERNO_VentasCompras_Calculo_Lineas_Modelo>();
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null)
                {
                    lst_INTERNO_VentasCompras_Calculo_Lineas_Modelo = (from obj_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo
                                                                       select new INTERNO_VentasCompras_Calculo_Lineas_Modelo
                                                                       {
                                                                           IdArticulo = (obj_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo != null ? obj_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo.Value : -1),
                                                                           IdArticuloComodin = (obj_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticuloComodin != null ? obj_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticuloComodin.Value : -1),
                                                                           EsArticuloComodin = (obj_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticuloComodin != null ? true : false),
                                                                           IdImpuestoTipo = obj_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idImpuestoTipo,
                                                                           Importe = (obj_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.importe != null ? obj_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.importe.Value : 0m)
                                                                       }).ToList();
                }

                // ## 4º--> CALCULAR LOS IMPORTE E IMPUESTOS ################################################################################################
                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_CALCULO_IMPORTEIMPUESTOS_TOTALES = g_obj_VentasCompras_Impuestos_Calculos.Calcular_ImportesImpuestos(g_mdl_GEN_ImpuestosCabecera,
                                                                                                                                                                        g_lst_INTERNO_GEN_ImpuestosTipos_Listado_Modelo,
                                                                                                                                                                        0m,
                                                                                                                                                                        0m,
                                                                                                                                                                        dcm_DescuentoFinalAlbaran,
                                                                                                                                                                        lst_INTERNO_VentasCompras_Calculo_Lineas_Modelo,
                                                                                                                                                                        null,
                                                                                                                                                                        bol_RecargoEquivalencia);

                if (mdl_INTERNO_ValorDevuelto_Modelo_CALCULO_IMPORTEIMPUESTOS_TOTALES.TodoCorrecto)
                {
                    // ## 5º--> ACTUALIZAR EL LISTADO GENERAL DE IMPORTES E IMPUESTOS ########################################################################
                    g_lst_INTERNO_ImportesImpuestos_Modelo = (List<INTERNO_ImportesImpuestos_Modelo>)mdl_INTERNO_ValorDevuelto_Modelo_CALCULO_IMPORTEIMPUESTOS_TOTALES.Objeto;
                    g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES = (INTERNO_ImportesImpuestos_Modelo)mdl_INTERNO_ValorDevuelto_Modelo_CALCULO_IMPORTEIMPUESTOS_TOTALES.Objeto_Auxiliar_1;

                    //## 6º--> ACTUALIZAR LOS VALORES EN BASE DE DATOS SI HICIERA FALTA ######################################################################
                    bool bol_ActualizarBaseDatos = (bool)mdl_INTERNO_ValorDevuelto_Modelo_CALCULO_IMPORTEIMPUESTOS_TOTALES.Objeto_Auxiliar_2;
                    if ((bol_ActualizarBaseDatos && bol_CargaInicial == false))
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo = Grabar_ImportesImpuestos_Resumen(g_mdl_GEN_ImpuestosCabecera, dtt_Fecha_Seleccionada, dcm_DescuentoFinalAlbaran, bol_RecargoEquivalencia);
                    }

                    // ## 7º ACTUALIZAR LOS REGISTROS EL DATAGRIDVIEW ########################################################################################
                    foreach (INTERNO_ImportesImpuestos_Modelo mdl_INTERNO_ImportesImpuestos_Modelo in g_lst_INTERNO_ImportesImpuestos_Modelo)
                    {
                        //Si el bruto es diferente de 0 se Agrega al dataGridView
                        if (mdl_INTERNO_ImportesImpuestos_Modelo.Bruto != 0m)
                        {
                            //Añadir al DataGridView
                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_INTERNO_ImportesImpuestos_Modelo_A_Row(mdl_INTERNO_ImportesImpuestos_Modelo, null));
                        }

                        //Esperar un poco
                        Thread.Sleep(1);
                    }
                    // ## 8º--> AÑADIR LA LINEA DEL FINAL (RESUMEN TOTALES) ####################################################################################
                    ((BackgroundWorker)sender).ReportProgress(1, Transformar_INTERNO_ImportesImpuestos_Modelo_A_Row(g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES, null));

                    // ## 9º--> PONER EL TOTAL FINAL ###########################################################################################################
                    dcm_TotalImporte = g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Total;
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_CALCULO_IMPORTEIMPUESTOS_TOTALES;
                }
            }
            catch (ThreadAbortException ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_ActualizarImportes_DoWork));
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_ActualizarImportes_DoWork));
            }
            finally
            {
                mdl_INTERNO_ValorDevuelto_Modelo.Objeto = dcm_TotalImporte;
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_ActualizarImportes_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Añadir Linea al DataGridView de Resumen (Totales)
                g_frm_P_AlbaranCabecera.Exferia_DataGridView_Resumen.Rows.Add((DataGridViewRow)e.UserState);

            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_ActualizarImportes_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!e.Cancelled)
            {
                try
                {
                    //Valor devuelto
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_RESULTADO = (INTERNO_ValorDevuelto_Modelo)e.Result;

                    if (mdl_INTERNO_ValorDevuelto_Modelo_RESULTADO.TodoCorrecto == false)
                    {
                        if (mdl_INTERNO_ValorDevuelto_Modelo_RESULTADO.Mensaje.Trim().Length > 0)
                        {
                            Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo_RESULTADO.Mensaje);
                        }
                    }
                    //Si esta Todo Correcto, se pone el total final
                    else
                    {
                        //Actualizar el control de Resumen de Facturas
                        g_frm_P_AlbaranCabecera.CTU_Cartera_Ventas_AlbaranCabecera.Rellenar_DataGrid(G_ENUM_CTU_CARTERA_VENTAS_TIPODOCUMENTOFILTRO.AlbaranesCabeceraVenta, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, true);

                        g_frm_P_AlbaranCabecera.Exferia_Label_SinColor_TotalImporte_Valor.Text = ((decimal)mdl_INTERNO_ValorDevuelto_Modelo_RESULTADO.Objeto).ToString();
                    }
                }
                catch (Exception ex)
                {
                    Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_ActualizarImportes_Completed));
                }
            }
        }

        public DataGridViewRow Transformar_INTERNO_ImportesImpuestos_Modelo_A_Row(INTERNO_ImportesImpuestos_Modelo _mdl_INTERNO_ImportesImpuestos_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_AlbaranCabecera.Exferia_DataGridView_Resumen.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_AlbaranCabecera.Exferia_DataGridView_Resumen);
            }

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

                    long? lng_valor = long.Parse(str_Valor);
                    if (lng_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                    }
                }
                else
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _mdl_INTERNO_ImportesImpuestos_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ImportesImpuestos_Modelo, null);
                }


                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        private INTERNO_ValorDevuelto_Modelo Grabar_ImportesImpuestos_Resumen(GEN_ImpuestosCabecera _mdl_GEN_ImpuestosCabecera, DateTime _dtt_Fecha, decimal _dcm_DescuentoFinalAlbaran, bool _bol_Recargo)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            //Iniciar transaccion
            using (TransactionScope obj_TransactionScope = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    //ACTUALIZAR IDIMPUESTOCABECERA,FECHA Y LOS DESCUENTOS 
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARDESCUENTOS = g_obj_VTA_AlbaranesCabecera_Datos.Actualizar_VariosCampos( g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id,
                                                                                                                                                                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idCliente.Value,
                                                                                                                                                                    _mdl_GEN_ImpuestosCabecera.id,
                                                                                                                                                                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idMoneda,
                                                                                                                                                                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_PreventaHabitual,
                                                                                                                                                                    _dtt_Fecha, 
                                                                                                                                                                    _dcm_DescuentoFinalAlbaran,
                                                                                                                                                                    _bol_Recargo);

                    if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARDESCUENTOS.TodoCorrecto)
                    {
                        //ACTUALIZAR VTA_AlbaranesCabecera_Resumen
                        INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_GRABARRESUMEN = g_obj_VTA_AlbaranesCabecera_Resumen_Datos.Insertar(g_lst_INTERNO_ImportesImpuestos_Modelo, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id);
                        if (mdl_INTERNO_ValorDevuelto_Modelo_GRABARRESUMEN.TodoCorrecto)
                        {
                            //Actualizar los Totales de la Cabecera
                            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARTOTALES = g_obj_VTA_AlbaranesCabecera_Datos.Actualizar_Totales(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id,
                                                                                                                                                                        (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Bruto : 0),
                                                                                                                                                                        (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.BaseImponible : 0),
                                                                                                                                                                        (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Impuesto_Calculado : 0),
                                                                                                                                                                        (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Recargo_Calculado : 0),
                                                                                                                                                                        (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.DescuentoAlbaranFinal_Calculado : 0),
                                                                                                                                                                        (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Total : 0));
                            if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARTOTALES.TodoCorrecto)
                            {
                                //Terminar Trasaccion .......................................................................................
                                obj_TransactionScope.Complete();
                                obj_TransactionScope.Dispose();

                                #region Datos Actualizados en el Modelo General
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idCliente = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idCliente;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idImpuestoCabecera = _mdl_GEN_ImpuestosCabecera.id;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idMoneda = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idMoneda;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_PreventaHabitual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_PreventaHabitual;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.descuentoFinalAlbaran = _dcm_DescuentoFinalAlbaran;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.recargo = _bol_Recargo;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha = _dtt_Fecha;

                                //totales
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_bruto = (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Bruto : 0);
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_baseImponible = (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.BaseImponible : 0);
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_impuesto = (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Impuesto_Calculado : 0);
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_recargo = (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Recargo_Calculado : 0);
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_descuentoFinalAlbaran = (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.DescuentoAlbaranFinal_Calculado : 0);
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total = (g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES != null ? g_mdl_INTERNO_ImportesImpuestos_Modelo_TOTALES.Total : 0);

                                //Relaciones
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_ImpuestosCabecera = _mdl_GEN_ImpuestosCabecera;
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Monedas = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Monedas;
                                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_PreventaHabitual != null)
                                {
                                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores1 = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores1;
                                }

                                // Devolver al Listado el Row Añadido/Modificado
                                if (g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen != null)
                                {
                                    g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                                }
                                else if (g_frm_P_AlbaranCabecera.P_Base_F3Origen != null)
                                {
                                    g_frm_P_AlbaranCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                                }
                                #endregion
                            }
                            else
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARTOTALES;
                            }
                        }
                        else
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_GRABARRESUMEN;
                        }
                    }
                    else
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARDESCUENTOS;
                    }
                }
                catch (Control_Errores)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                    obj_TransactionScope.Dispose();
                }
                catch (Exception ex)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                    Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Grabar_ImportesImpuestos_Resumen));
                    obj_TransactionScope.Dispose();
                }
                finally
                {
                    //Liberar transaccion
                    obj_TransactionScope.Dispose();
                }
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        #endregion

        #region Cambio Cliente (rellenar datos auxiliares relacionados)
        public void Cambio_Cliente(long _lng_idCliente, G_ENUM_CAMBIOCLIENTE _obj_Enum_CAMBIOCLIENTE)
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_AlbaranCabecera.Enabled = false;

                //Mostrar la pantalla de espera
                g_frm_PE_Esperando_BarraProgreso = new PE_Esperando_BarraProgreso(Mensajes.G_STR_ESPERANDO_GENERANDODATOS());

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

                //Argumentos
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_lng_idCliente);
                lst_Argumentos.Add(_obj_Enum_CAMBIOCLIENTE);

                //Vaciar los datos del grid si hay que recalcular las lineas
                if (!_obj_Enum_CAMBIOCLIENTE.Equals(G_ENUM_CAMBIOCLIENTE.NO_ACTUALIZARCLIENTE))
                {
                    g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows.Clear();
                    g_int_TotalRegistrosInsertados_AlbaranLinea = 0;
                    g_int_TotalRegistros_AlbaranLinea = 0;
                    g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_AlbaranLinea;
                    g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_AlbaranLinea;
                }

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_Cambio_Cliente.RunWorkerAsync(lst_Argumentos);
                //#################################################################################################

                g_frm_PE_Esperando_BarraProgreso.ShowDialog();
            }
            catch (Exception ex)
            {
                g_frm_P_AlbaranCabecera.Enabled = true;

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

                throw new Control_Errores("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Cambio_Cliente), true);
            }
        }

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

            try
            {
                //Argumentos ..........................................................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                long lng_idCliente = (long)lst_Argumentos[0];
                G_ENUM_CAMBIOCLIENTE obj_Enum_CAMBIOCLIENTE = (G_ENUM_CAMBIOCLIENTE)lst_Argumentos[1];
                //....................................................................................................

                // ## 1º--> BUSCAR LOS DATOS DEL CLIENTE #########################################################################################
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType("" + Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAECLIENTES_OBTENERMODELO_POR_ID_AUX_1, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { lng_idCliente, true, true, true, true, true, true };

                //Pasamos los parametros al metodo y lo ejecutamos
                g_mdl_MAE_Clientes = (MAE_Clientes)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);

                if (g_mdl_MAE_Clientes != null)
                {
                    //## 2º--> VALIDAR LOS IMPUESTOS PARA LAS LINEAS, SI EL IMPUESTOCABECERA POR DEFECTO DEL CLIENTE NEUVO, FUERA DIFERENTE AL QUE YA ESTABA #######################
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_VALIDARIMPUESTOS = Validar_Impuestos(g_mdl_MAE_Clientes);
                    if (mdl_INTERNO_ValorDevuelto_Modelo_VALIDARIMPUESTOS.TodoCorrecto == false)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_VALIDARIMPUESTOS;
                    }
                    else
                    {
                        //Actualizar en la clase de calculos de impuesto el idCliente
                        if (g_obj_VentasCompras_Impuestos_Calculos != null)
                        {
                            g_obj_VentasCompras_Impuestos_Calculos.Cambio_ClienteProveedor(g_mdl_MAE_Clientes.id);
                        }

                        List<long> lst_idsLineasModificadas = new List<long>();

                        //Hay que recalcular las lineas
                        if (obj_Enum_CAMBIOCLIENTE.Equals(G_ENUM_CAMBIOCLIENTE.SI_RECALCULARLINEAS))
                        {
                            //Recalcular las lineas
                            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_RECALCULAR = Actualizar_LineasRecalculadas(g_mdl_MAE_Clientes,
                                                                                                                                    (g_mdl_MAE_Clientes.descuentoGeneral != null ? g_mdl_MAE_Clientes.descuentoGeneral.Value : 0m),
                                                                                                                                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha,
                                                                                                                                    0m,
                                                                                                                                    (BackgroundWorker)sender);
                            if (mdl_INTERNO_ValorDevuelto_Modelo_RECALCULAR.TodoCorrecto)
                            {
                                lst_idsLineasModificadas = (List<long>)mdl_INTERNO_ValorDevuelto_Modelo_RECALCULAR.Objeto;

                                //vaciar las antiguas
                                g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = new List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo>();
                            }
                            //Con Errores
                            else
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_RECALCULAR;
                            }
                        }
                        else
                        {
                            //Ver si hay que actualizar el cliente
                            if (!obj_Enum_CAMBIOCLIENTE.Equals(G_ENUM_CAMBIOCLIENTE.NO_ACTUALIZARCLIENTE))
                            {

                                // 1º ACTUALIZAMOS 
                                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR = Actualizar_Cliente(g_mdl_MAE_Clientes, (BackgroundWorker)sender);
                                if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR.TodoCorrecto)
                                {
                                    lst_idsLineasModificadas = ((List<long>)mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR.Objeto);

                                    //vaciar las antiguas
                                    g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = new List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo>();
                                }
                                else
                                {
                                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR;
                                }
                            }
                        }

                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            Rellenar_DatosAuxiliares_Cliente(g_mdl_MAE_Clientes);

                            //Actualizar las Lineas
                            if (!obj_Enum_CAMBIOCLIENTE.Equals(G_ENUM_CAMBIOCLIENTE.NO_ACTUALIZARCLIENTE))
                            {
                                //vaciar las antiguas
                                g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = new List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo>();

                                if (lst_idsLineasModificadas != null)
                                {
                                    //Mensaje de recalculando .........................................................................................
                                    ((BackgroundWorker)sender).ReportProgress(3, Mensajes.G_STR_ESPERANDO_ACTUALIZANDO_REGISTROSLISTADO());
                                    //Vaciar el total cargado de lineas
                                    ((BackgroundWorker)sender).ReportProgress(2, 0);
                                    //Total de lineas
                                    ((BackgroundWorker)sender).ReportProgress(1, lst_idsLineasModificadas.Count);
                                    //.................................................................................................................

                                    //Actualizarlas en el Grid
                                    int int_Contador = 0;
                                    foreach (long lng_idAlbaranLinea in lst_idsLineasModificadas)
                                    {

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

                                        //Añadir al DataGridView
                                        ((BackgroundWorker)sender).ReportProgress(4, lng_idAlbaranLinea);

                                        int_Contador += 1;

                                        //Añadir linea al progress
                                        ((BackgroundWorker)sender).ReportProgress(2, int_Contador);

                                        //Esperar un poco
                                        Thread.Sleep(1);

                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ALBARANES_VALIDACION_NOENCONTRO_CLIENTE();
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Cliente_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Cliente_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_Cambio_Cliente_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (e.ProgressPercentage.ToString().Equals("1"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Total = int.Parse(e.UserState.ToString());
                }
                else if (e.ProgressPercentage.ToString().Equals("2"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Actualizar = int.Parse(e.UserState.ToString());
                }
                else if (e.ProgressPercentage.ToString().Equals("3"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Mensaje = e.UserState.ToString();
                }
                else
                {
                    Actualizar_Registro_AlbaranLinea((long)e.UserState, G_ENUM_TIPOACCION.INT_INSERTAR,false,false,false);
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Cambio_Cliente_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = null;

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

                mdl_INTERNO_ValorDevuelto_Modelo = (INTERNO_ValorDevuelto_Modelo)e.Result;
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto == false)
                {
                    if (mdl_INTERNO_ValorDevuelto_Modelo.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo.Mensaje);
                    }

                    RecargarDatos();
                }
                else
                {        
                    #region  Servicio
                    //vaciar los datos primero
                    VaciarDatos_Servicios();

                    //Cargar los datos nuevos del cliente
                    g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_RELACIONADOS_Padre_ID = g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Id;
                    
                    //Objeto para enviar al mantenimiento y que bloqueo el campo de cliente
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo = new List<INTERNO_Filtro_OpcionPadre_Modelo>();
                    lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MAE_CLIENTE, g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Id));
                    g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Objeto_ParaEnviarAMantenimiento = lst_INTERNO_Filtro_OpcionPadre_Modelo;

                    //Desbloquear Controles
                    g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Enabled = true;
                    #endregion

                    //Activar o desactivar el recargo Equivalencia
                    Recargo_ActivarDesactivar();

                    //Mostrar si tuviera Servicios el Cliente
                    Mostrar_ServiciosCliente();

                    //Recargar el Listado Secundario que se abre
                    ArbolSecundario_Cambiar_ClienteArticulo(g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Id);

                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Cliente_Completed));
            }
            finally
            {
                //Desbloquear el Formulario
                g_frm_P_AlbaranCabecera.Enabled = true;
            }
        }

        private INTERNO_ValorDevuelto_Modelo Validar_Impuestos(MAE_Clientes _mdl_MAE_Clientes)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";

            try
            {
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                {
                    // ## 1º--> BUSCAR EL IMPUESTOCABECERA SI NO ES NULO ###############################################################################
                    GEN_ImpuestosCabecera mdl_GEN_ImpuestosCabecera = Datos_Generales.GEN_ImpuestosCabecera_Obtener_Modelo_Por_Id(_mdl_MAE_Clientes.idImpuestoCabecera);
                    if (mdl_GEN_ImpuestosCabecera != null)
                    {
                        // ## 2º--> COMPROBAR QUE EL IDIMPUESTOCABECERA ES DIFERENTE AL QUE YA ESTABA
                        if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null &&
                           !g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idImpuestoCabecera.Equals(mdl_GEN_ImpuestosCabecera.id))
                        {
                            // ## 3º--> RECORRER LINEAS
                            foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo)
                            {
                                bool? bol_Existe = Datos_Generales.GEN_ImpuestosLineas_Existe(mdl_GEN_ImpuestosCabecera.id, mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idImpuestoTipo.Value, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha);
                                if (bol_Existe == null || bol_Existe == false)
                                {
                                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;

                                    string str_Cliente = "(" + _mdl_MAE_Clientes.codigo + ") " + _mdl_MAE_Clientes.razonSocial;
                                    string str_ImpuestoCabecera = "(" + mdl_GEN_ImpuestosCabecera.codigo + ") " + mdl_GEN_ImpuestosCabecera.descripcion;

                                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_IMPUESTOTIPO_NOACTIVO_IMPUESTOCABECERAPORDEFECTO_CLIENTE(str_Cliente, str_ImpuestoCabecera, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha.ToString("dd/MM/yyyy"));
                                    break;
                                }
                            }
                        }
                    }
                    //Si el ImpuestoCabecera es nulo (error)
                    else
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ALBARANES_VALIDACION_NOENCONTRO_IMPUESTOS();
                    }
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Validar_Impuestos));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        private void Rellenar_DatosAuxiliares_Cliente(MAE_Clientes _mdl_MAE_Clientes)
        {
            try
            {
                //Actualizar el recargo segun el cliente
                g_bol_Recargo_SEGUNCLIENTE = _mdl_MAE_Clientes.recargo != null ? _mdl_MAE_Clientes.recargo.Value : false;

                //Descuento Final Albaran
                g_frm_P_AlbaranCabecera.Exferia_TextBox_DescuentoFinalAlbaran.Text = _mdl_MAE_Clientes.descuentoFinalAlbaran != null ? _mdl_MAE_Clientes.descuentoFinalAlbaran.Value.ToString() : "";

                //Moneda
                if (_mdl_MAE_Clientes.GEN_Monedas != null)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Id = _mdl_MAE_Clientes.GEN_Monedas.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Codigo = _mdl_MAE_Clientes.GEN_Monedas.moneda;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Descripcion = _mdl_MAE_Clientes.GEN_Monedas.descripcion;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_FechaBorrado = _mdl_MAE_Clientes.GEN_Monedas.fechaBorrado;
                }

                //Forma de pago
                if (_mdl_MAE_Clientes.MAE_FormasPago != null)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Id = _mdl_MAE_Clientes.MAE_FormasPago.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Codigo = _mdl_MAE_Clientes.MAE_FormasPago.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_Descripcion = _mdl_MAE_Clientes.MAE_FormasPago.descripcion;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_FormaPago.Exferia_F3_SoloSeleccion_FechaBorrado = _mdl_MAE_Clientes.MAE_FormasPago.fechaBorrado;
                }

                //ImpuestoCabecera
                if (_mdl_MAE_Clientes.GEN_ImpuestosCabecera != null)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Id = _mdl_MAE_Clientes.GEN_ImpuestosCabecera.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Codigo = _mdl_MAE_Clientes.GEN_ImpuestosCabecera.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Descripcion = _mdl_MAE_Clientes.GEN_ImpuestosCabecera.descripcion;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_FechaBorrado = _mdl_MAE_Clientes.GEN_ImpuestosCabecera.fechaBorrado;
                }

                //Vendedor (Preventa habitual)
                if (_mdl_MAE_Clientes.MAE_Vendedores != null)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Id = _mdl_MAE_Clientes.MAE_Vendedores.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Codigo = _mdl_MAE_Clientes.MAE_Vendedores.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Descripcion = _mdl_MAE_Clientes.MAE_Vendedores.nombre;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_FechaBorrado = _mdl_MAE_Clientes.MAE_Vendedores.fechaBorrado;
                }

                //Vendedor (Preventa)
                if (_mdl_MAE_Clientes.MAE_Vendedores != null)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Id = _mdl_MAE_Clientes.MAE_Vendedores.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Codigo = _mdl_MAE_Clientes.MAE_Vendedores.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Descripcion = _mdl_MAE_Clientes.MAE_Vendedores.nombre;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_FechaBorrado = _mdl_MAE_Clientes.MAE_Vendedores.fechaBorrado;
                }

                //Vendedor (Cobrador)
                if (_mdl_MAE_Clientes.MAE_Vendedores1 != null)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Id = _mdl_MAE_Clientes.MAE_Vendedores1.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Codigo = _mdl_MAE_Clientes.MAE_Vendedores1.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Descripcion = _mdl_MAE_Clientes.MAE_Vendedores1.nombre;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_FechaBorrado = _mdl_MAE_Clientes.MAE_Vendedores1.fechaBorrado;
                }

                //Vendedor (Cobrador Habitual)
                if (_mdl_MAE_Clientes.MAE_Vendedores1 != null)
                {
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Id = _mdl_MAE_Clientes.MAE_Vendedores1.id;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Codigo = _mdl_MAE_Clientes.MAE_Vendedores1.codigo;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Descripcion = _mdl_MAE_Clientes.MAE_Vendedores1.nombre;
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_FechaBorrado = _mdl_MAE_Clientes.MAE_Vendedores1.fechaBorrado;
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Rellenar_DatosAuxiliares_Cliente));
            }
        }

        private INTERNO_ValorDevuelto_Modelo Actualizar_Cliente(MAE_Clientes _mdl_MAE_Clientes, BackgroundWorker _obj_BackgroundWorker)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Objeto = null;

            //Iniciar transaccion
            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue))
            {
                try
                {
                    //Actualizar el Cliente
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARCABECERA = g_obj_VTA_AlbaranesCabecera_Datos.Actualizar_VariosCampos(   g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id,
                                                                                                                                                                    _mdl_MAE_Clientes.id,
                                                                                                                                                                    _mdl_MAE_Clientes.idImpuestoCabecera,
                                                                                                                                                                    _mdl_MAE_Clientes.idMoneda,
                                                                                                                                                                    _mdl_MAE_Clientes.idVendedor,
                                                                                                                                                                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha,
                                                                                                                                                                     (_mdl_MAE_Clientes.descuentoFinalAlbaran != null ? _mdl_MAE_Clientes.descuentoFinalAlbaran.Value : 0m),
                                                                                                                                                                     (_mdl_MAE_Clientes.recargo != null ? _mdl_MAE_Clientes.recargo.Value : false)
                                                                                                                                                                    );
                    if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARCABECERA.TodoCorrecto)
                    {
                        //Terminamos la transaccion
                        transaccion_SQL.Complete();
                        transaccion_SQL.Dispose();

                        #region Datos Actualizados en el Modelo General
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idCliente = _mdl_MAE_Clientes.id;
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idImpuestoCabecera = _mdl_MAE_Clientes.idImpuestoCabecera;
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idMoneda = _mdl_MAE_Clientes.idMoneda;
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_PreventaHabitual = _mdl_MAE_Clientes.idVendedor;
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.descuentoFinalAlbaran = _mdl_MAE_Clientes.descuentoFinalAlbaran;
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.recargo = _mdl_MAE_Clientes.recargo;
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;

                        //Relaciones
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes = _mdl_MAE_Clientes;
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_ImpuestosCabecera = _mdl_MAE_Clientes.GEN_ImpuestosCabecera;
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Monedas = _mdl_MAE_Clientes.GEN_Monedas;
                        if (_mdl_MAE_Clientes.idVendedor != null)
                        {
                            g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores1 = _mdl_MAE_Clientes.MAE_Vendedores;
                        }
                        #endregion

                        //Listado de lineas a Actualizar
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Select(m => m.id).ToList();

                    }
                }
                catch (Control_Errores)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

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

                    transaccion_SQL.Dispose();
                    Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_Cliente));
                }
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Cambio de Fecha
        public void Cambio_Fecha(G_ENUM_CAMBIOFECHA _obj_ENUM_CAMBIOFECHA)
        {
            try
            {
                //## 1º--> CANCELAMOS SI LA TAREA SE ESTUVIERA EJECUTANDO #########################
                if (g_obj_TareaAsincrona_Cambio_Fecha!=null)
                {
                    g_obj_TareaAsincrona_Cambio_Fecha.CancelAsync();
                    while (g_obj_TareaAsincrona_Cambio_Fecha.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_obj_TareaAsincrona_Cambio_Fecha = new BackgroundWorker();
                    g_obj_TareaAsincrona_Cambio_Fecha.DoWork += new DoWorkEventHandler(TareaAsincrona_Cambio_Fecha_DoWork);
                    g_obj_TareaAsincrona_Cambio_Fecha.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Cambio_Fecha_ProgressChanged);
                    g_obj_TareaAsincrona_Cambio_Fecha.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Cambio_Fecha_Completed);
                    g_obj_TareaAsincrona_Cambio_Fecha.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Cambio_Fecha.WorkerSupportsCancellation = true;
                }

                //1º--> SI NO HAY CABECERA NO HACE NADA ###########################################
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo == null)
                {
                    return;
                }

                //2º--> SI CAMBIO LA FECHA ######################################################
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha.ToString("dd/MM/yyyy").Equals(g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha))
                {
                    return;
                }

                //Vaciar los datos del grid si hay que recalcular las lineas
                if (_obj_ENUM_CAMBIOFECHA.Equals(G_ENUM_CAMBIOFECHA.SI_RECALCULARLINEAS))
                {
                    g_frm_P_AlbaranCabecera.Exferia_DataGridView_Lineas.Rows.Clear();
                    g_int_TotalRegistrosInsertados_AlbaranLinea = 0;
                    g_int_TotalRegistros_AlbaranLinea = 0;
                    g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_AlbaranLinea;
                    g_frm_P_AlbaranCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_AlbaranLinea;
                }

                //Argumentos
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(DateTime.ParseExact(g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture));
                lst_Argumentos.Add(_obj_ENUM_CAMBIOFECHA);

                //(Tarea Asincrona) Cargar Datos .....................................................
                g_obj_TareaAsincrona_Cambio_Fecha.RunWorkerAsync(lst_Argumentos);
                //....................................................................................

                //Mostrar pantalla de espera
                g_bol_TareaAsincrona_Cambio_Fecha_PerdioFoco = true;

                g_frm_PE_Esperando_BarraProgreso = new PE_Esperando_BarraProgreso(Mensajes.G_STR_ESPERANDO_VALIDANDODATOS());
                g_frm_PE_Esperando_BarraProgreso.ShowDialog();

                g_bol_TareaAsincrona_Cambio_Fecha_PerdioFoco = false;
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando_BarraProgreso != null)
                {
                    g_frm_PE_Esperando_BarraProgreso.Close();
                    g_frm_PE_Esperando_BarraProgreso = null;
                }

                g_bol_TareaAsincrona_Cambio_Fecha_PerdioFoco = false;

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Cambio_Fecha));
            }
        }

        private void TareaAsincrona_Cambio_Fecha_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Objeto = null;
            try
            {
                //Argumentos #################################################################
                List<object> lst_Argumentos = (List<object>)e.Argument;
                //fecha
                DateTime dtt_Fecha = (DateTime)lst_Argumentos[0];
                G_ENUM_CAMBIOFECHA obj_ENUM_CAMBIOFECHA = (G_ENUM_CAMBIOFECHA)lst_Argumentos[1];
                //############################################################################

                //Recorrer las Lineas para validar que los impuestosTipo del articulo existen para la fecha y el ImpuestoCabecera
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count>0)
                {
                    foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo)
                    {
                        bool? bol_Existe = Datos_Generales.GEN_ImpuestosLineas_Existe(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Id, mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idImpuestoTipo.Value, dtt_Fecha);
                        if (bol_Existe == null || bol_Existe == false)
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;

                            string str_Articulo = "(" + mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_Codigo + ") " + mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_Descripcion;
                            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_IMPUESTOTIPO_NOACTIVO_ARTICULOFECHA(str_Articulo, dtt_Fecha.ToString("dd/MM/yyyy"));
                            break;
                        }
                    }
                }

                //Si esta todo Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    //Actualizar en la clase de calculos de impuesto la fecha
                    if (g_obj_VentasCompras_Impuestos_Calculos != null)
                    {
                        g_obj_VentasCompras_Impuestos_Calculos.Cambio_Fecha(dtt_Fecha);
                    }

                    // Hay que recalcular las lineas
                    if (obj_ENUM_CAMBIOFECHA.Equals(G_ENUM_CAMBIOFECHA.SI_RECALCULARLINEAS))
                    {
                        //Recalcular las lineas
                        INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_RECALCULAR = Actualizar_LineasRecalculadas(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes,
                                                                                                                            (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes.descuentoGeneral != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Clientes.descuentoGeneral.Value : 0m),
                                                                                                                            dtt_Fecha,
                                                                                                                            0m,
                                                                                                                            (BackgroundWorker)sender);

                        List<long> lst_idsLineasModificadas = new List<long>();

                        if (mdl_INTERNO_ValorDevuelto_Modelo_RECALCULAR.TodoCorrecto)
                        {
                            lst_idsLineasModificadas = (List<long>)mdl_INTERNO_ValorDevuelto_Modelo_RECALCULAR.Objeto;

                            //vaciar las antiguas
                            g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = new List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo>();

                            if (lst_idsLineasModificadas != null)
                            {

                                //Mensaje de recalculando .........................................................................................
                                ((BackgroundWorker)sender).ReportProgress(3, Mensajes.G_STR_ESPERANDO_ACTUALIZANDO_REGISTROSLISTADO());
                                //Vaciar el total cargado de lineas
                                ((BackgroundWorker)sender).ReportProgress(2, 0);
                                //Total de lineas
                                ((BackgroundWorker)sender).ReportProgress(1, lst_idsLineasModificadas.Count);
                                //.................................................................................................................


                                //Actualizarlas en el Grid
                                int int_Contador = 0;
                                foreach (long lng_idAlbaranLinea in lst_idsLineasModificadas)
                                {

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

                                    //Añadir al DataGridView
                                    ((BackgroundWorker)sender).ReportProgress(4, lng_idAlbaranLinea);

                                    int_Contador += 1;

                                    //Añadir linea al progress
                                    ((BackgroundWorker)sender).ReportProgress(2, int_Contador);

                                    //Esperar un poco
                                    Thread.Sleep(1);

                                }
                            }
                        }
                        //Con Errores
                        else
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_RECALCULAR;
                        }
                    }
                    //No recalcula lineas
                    else
                    {
                        INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = new INTERNO_ValorDevuelto_Modelo();
                        mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto = true;
                        mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.Mensaje = "";

                        if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo!=null && g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count>0)
                        {
                            foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m=>m.idAlbaranFacturaLinea_Padre==null))
                            {

                                if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo != null)
                                {

                                    #region ACTUALIZAR ARTICULO MOVIMIENTOS DIARIO 

                                    #region Rellenar modelo
                                    INTERNO_ArticuloDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = new INTERNO_ArticuloDiarioActualizar_Documentos_Modelo();

                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                                    //Datos Actuales
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo.Value;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Actual = dtt_Fecha;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idAlmacen;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idUbicacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.cantidad;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.segundaUnidad_cantidad;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.TipoCompraVenta_Opcion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.relacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.operacion;

                                    //Datos Anteriores
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Modificacion = true;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticuloComodin_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticuloComodin;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idAlmacen;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idUbicacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.TipoCompraVenta_Opcion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.cantidad;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.segundaUnidad_cantidad;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.relacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.operacion;
                                    #endregion

                                    mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = Funciones_ArticuloMovimientosDiario.Actualizar_ArticuloMovimientoDiario(mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo);
                                    if (!mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                                    {
                                        break;
                                    }
                                    #endregion

                                    if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                                    {
                                        List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION=g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idAlbaranFacturaLinea_Padre == mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id).ToList();

                                        if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION != null && lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.Count>0)
                                        {
                                            foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION in lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION)
                                            {
                                                #region ACTUALIZAR ARTICULO MOVIMIENTOS DIARIO EN PROMOCION

                                                #region Rellenar modelo
                                                INTERNO_ArticuloDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION = new INTERNO_ArticuloDiarioActualizar_Documentos_Modelo();

                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                                                //Datos Actuales
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idArticulo.Value;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Fecha_Actual = dtt_Fecha;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdDelegacion_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idAlmacen;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idUbicacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Cantidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.cantidad;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Cantidad_SegundaUnidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.segundaUnidad_cantidad;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.TipoCompraVenta_Opcion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.relacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.operacion;

                                                //Datos Anteriores
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Modificacion = true;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdArticuloComodin_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idArticuloComodin;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idArticulo;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idAlmacen;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idUbicacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.TipoCompraVenta_Opcion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.cantidad;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.segundaUnidad_cantidad;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.relacion;
                                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.operacion;

                                                #endregion

                                                mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = Funciones_ArticuloMovimientosDiario.Actualizar_ArticuloMovimientoDiario(mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION);
                                                if (!mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                                                {
                                                    break;
                                                }
                                            }

                                            if (!mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                                            {
                                                break;
                                            }
                                            #endregion
                                        }
                                    }
                                }
                            }
                        }

                        if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                        {
                            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR = Actualizar_Fecha(dtt_Fecha);
                            if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR.TodoCorrecto)
                            {
                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha = dtt_Fecha;
                            }
                            else
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR;
                            }
                        }
                        else
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS;
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Fecha_DoWork));
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Fecha_DoWork));
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_Cambio_Fecha_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (e.ProgressPercentage.ToString().Equals("1"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Total = int.Parse(e.UserState.ToString());
                }
                else if (e.ProgressPercentage.ToString().Equals("2"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Actualizar = int.Parse(e.UserState.ToString());
                }
                else if (e.ProgressPercentage.ToString().Equals("3"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Mensaje = e.UserState.ToString();
                }
                else
                {
                    Actualizar_Registro_AlbaranLinea((long)e.UserState, G_ENUM_TIPOACCION.INT_INSERTAR,true,false,true);
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Cambio_Fecha_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            //Cerrar pantalla de espera
            if (g_frm_PE_Esperando_BarraProgreso != null)
            {
                g_frm_PE_Esperando_BarraProgreso.Close();
                g_frm_PE_Esperando_BarraProgreso = null;
            }

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

                //Mostrar si tuviera algun mensaje de Error
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    //Mostrar el mensaje s lo tuviera
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    }

                    //VOLVER A PONER LOS VALORES ORIGINALES
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
                    {
                        //Fecha
                        g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha.ToString("dd/MM/yyyy");

                        //Poner el Foco 
                        Funciones.Poner_Foco_Objeto(g_frm_P_AlbaranCabecera, g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_Fecha);

                        //Actualizar en la clase de calculos de impuesto la fecha
                        if (g_obj_VentasCompras_Impuestos_Calculos != null)
                        {
                            g_obj_VentasCompras_Impuestos_Calculos.Cambio_Fecha(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha);
                        }
                    }
                }
                else
                {
                    Actualizar_ImportesImpuestos(false, true);

                    //Se actualizan el listado general, solo cuando ya estaba grabado la linea
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
                    {
                        // Devolver al Listado el Row Añadido/Modificado
                        if (g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen != null)
                        {
                            g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                        else if (g_frm_P_AlbaranCabecera.P_Base_F3Origen != null)
                        {
                            g_frm_P_AlbaranCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                    }

                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Fecha_Completed));
            }
        }

        private INTERNO_ValorDevuelto_Modelo Actualizar_Fecha(DateTime _dtt_Fecha)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Objeto = null;

            try
            {
                //Actualizar la fecha
                mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_Datos.Actualizar_Fecha(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, _dtt_Fecha);
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_Fecha));
            }


            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Cambio de Delegacion
        public void Cambio_Delegacion()
        {
            try
            {
                //## 1º--> CANCELAMOS SI LA TAREA SE ESTUVIERA EJECUTANDO #########################
                if (g_obj_TareaAsincrona_Cambio_Delegacion != null)
                {
                    g_obj_TareaAsincrona_Cambio_Delegacion.CancelAsync();
                    while (g_obj_TareaAsincrona_Cambio_Delegacion.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_obj_TareaAsincrona_Cambio_Delegacion = new BackgroundWorker();
                    g_obj_TareaAsincrona_Cambio_Delegacion.DoWork += new DoWorkEventHandler(TareaAsincrona_Cambio_Delegacion_DoWork);
                    g_obj_TareaAsincrona_Cambio_Delegacion.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Cambio_Delegacion_ProgressChanged);
                    g_obj_TareaAsincrona_Cambio_Delegacion.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Cambio_Delegacion_Completed);
                    g_obj_TareaAsincrona_Cambio_Delegacion.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Cambio_Delegacion.WorkerSupportsCancellation = true;
                }

                //1º--> SI NO HAY CABECERA NO HACE NADA ###########################################
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo == null)
                {
                    return;
                }

                //2º--> SI CAMBIO LA DELEGACION ######################################################
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion.Equals(g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Id))
                {
                    return;
                }

                //Argumentos
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_Id);

                //(Tarea Asincrona) Cargar Datos .....................................................
                g_obj_TareaAsincrona_Cambio_Delegacion.RunWorkerAsync(lst_Argumentos);
                //....................................................................................

                //Mostrar pantalla de espera
                g_frm_PE_Esperando_BarraProgreso = new PE_Esperando_BarraProgreso(Mensajes.G_STR_ESPERANDO_VALIDANDODATOS());
                g_frm_PE_Esperando_BarraProgreso.ShowDialog();
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando_BarraProgreso != null)
                {
                    g_frm_PE_Esperando_BarraProgreso.Close();
                    g_frm_PE_Esperando_BarraProgreso = null;
                }

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Cambio_Delegacion));
            }
        }

        private void TareaAsincrona_Cambio_Delegacion_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Objeto = null;
            try
            {
                //Argumentos #################################################################
                List<object> lst_Argumentos = (List<object>)e.Argument;
                //Delegacon
                long lng_idDelegacion = (long)lst_Argumentos[0];
                //############################################################################

               
                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = new INTERNO_ValorDevuelto_Modelo();
                mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto = true;
                mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.Mensaje = "";

                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                {
                    foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idAlbaranFacturaLinea_Padre == null))
                    {
                        if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null && mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo != null)
                        {
                            #region ACTUALIZAR ARTICULO MOVIMIENTOS DIARIO 

                            #region Rellenar modelo
                            INTERNO_ArticuloDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo = new INTERNO_ArticuloDiarioActualizar_Documentos_Modelo();

                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                            //Datos Actuales
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo.Value;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = lng_idDelegacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idAlmacen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idUbicacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.TipoCompraVenta_Opcion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.operacion;

                            //Datos Anteriores
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Modificacion = true;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticuloComodin_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticuloComodin;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idAlmacen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idUbicacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.TipoCompraVenta_Opcion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.operacion;
                            #endregion

                            mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = Funciones_ArticuloMovimientosDiario.Actualizar_ArticuloMovimientoDiario(mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo);
                            if (!mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                            {
                                break;
                            }
                            #endregion

                            if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                            {
                                List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idAlbaranFacturaLinea_Padre == mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id).ToList();

                                if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION != null && lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.Count > 0)
                                {
                                    foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION in lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION)
                                    {
                                        #region ACTUALIZAR ARTICULO MOVIMIENTOS DIARIO EN PROMOCION

                                        #region Rellenar modelo
                                        INTERNO_ArticuloDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION = new INTERNO_ArticuloDiarioActualizar_Documentos_Modelo();

                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_ALBARANVENTA.Codigo;

                                        //Datos Actuales
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdArticulo_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idArticulo.Value;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Fecha_Actual = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdDelegacion_Actual =lng_idDelegacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdAlmacen_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idAlmacen;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdUbicacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idUbicacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Cantidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.cantidad;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Cantidad_SegundaUnidad_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.segundaUnidad_cantidad;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.TipoCompraVentaOpcion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.TipoCompraVenta_Opcion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Relacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.relacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Operacion_Actual = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.operacion;

                                        //Datos Anteriores
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Modificacion = true;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdArticuloComodin_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idArticuloComodin;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdArticulo_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idArticulo;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Fecha_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdDelegacion_Anterior = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdAlmacen_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idAlmacen;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.IdUbicacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.idUbicacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.TipoCompraVentaOpcion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.TipoCompraVenta_Opcion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Cantidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.cantidad;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.segundaUnidad_cantidad;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Relacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.relacion;
                                        mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION.Operacion_Anterior = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_ENPROMOCION.operacion;

                                        #endregion

                                        mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = Funciones_ArticuloMovimientosDiario.Actualizar_ArticuloMovimientoDiario(mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ENPROMOCION);
                                        if (!mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                                        {
                                            break;
                                        }
                                    }

                                    if (!mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                                    {
                                        break;
                                    }
                                    #endregion
                                }
                            }
                        }
                    }
                }

                if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                {
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR = Actualizar_Delegacion(lng_idDelegacion);
                    if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR.TodoCorrecto)
                    {
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idDelegacion = lng_idDelegacion;
                    }
                    else
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR;
                    }
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS;
                }
            }
            catch (ThreadAbortException ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Delegacion_DoWork));
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Delegacion_DoWork));
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_Cambio_Delegacion_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (e.ProgressPercentage.ToString().Equals("1"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Total = int.Parse(e.UserState.ToString());
                }
                else if (e.ProgressPercentage.ToString().Equals("2"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Actualizar = int.Parse(e.UserState.ToString());
                }
                else if (e.ProgressPercentage.ToString().Equals("3"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Mensaje = e.UserState.ToString();
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Cambio_Delegacion_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            //Cerrar pantalla de espera
            if (g_frm_PE_Esperando_BarraProgreso != null)
            {
                g_frm_PE_Esperando_BarraProgreso.Close();
                g_frm_PE_Esperando_BarraProgreso = null;
            }

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

                //Mostrar si tuviera algun mensaje de Error
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    //Mostrar el mensaje s lo tuviera
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    }
                }
                else
                {
                    //Se actualizan el listado general, solo cuando ya estaba grabado la linea
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
                    {
                        // Devolver al Listado el Row Añadido/Modificado
                        if (g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen != null)
                        {
                            g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                        else if (g_frm_P_AlbaranCabecera.P_Base_F3Origen != null)
                        {
                            g_frm_P_AlbaranCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                    }

                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Delegacion_Completed));
            }
        }

        private INTERNO_ValorDevuelto_Modelo Actualizar_Delegacion(long _lng_idDelegacion)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Objeto = null;

            try
            {
                //Actualizar la Delegacion
                mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_Datos.Actualizar_Delegacion(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, _lng_idDelegacion);
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_Delegacion));
            }


            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Cambio de ImpuestoCabecera
        public void Cambio_ImpuestoCabecera()
        {
            try
            {
                //## 1º--> CANCELAMOS SI LA TAREA SE ESTUVIERA EJECUTANDO #########################
                if (g_obj_TareaAsincrona_Cambio_ImpuestoCabecera!=null)
                {
                    g_obj_TareaAsincrona_Cambio_ImpuestoCabecera.CancelAsync();
                    while (g_obj_TareaAsincrona_Cambio_ImpuestoCabecera.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_obj_TareaAsincrona_Cambio_ImpuestoCabecera = new BackgroundWorker();
                    g_obj_TareaAsincrona_Cambio_ImpuestoCabecera.DoWork += new DoWorkEventHandler(TareaAsincrona_Cambio_ImpuestoCabecera_DoWork);
                    g_obj_TareaAsincrona_Cambio_ImpuestoCabecera.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Cambio_ImpuestoCabecera_Completed);
                    g_obj_TareaAsincrona_Cambio_ImpuestoCabecera.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Cambio_ImpuestoCabecera.WorkerSupportsCancellation = true;
                }
                
                //1º--> SI NO TIENE LINEAS NO HACE NADA ###########################################
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo == null ||
                    g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count == 0)
                {
                    return;
                }

                //2º--> SI NO HAY CABECERA NO HACE NADA ###########################################
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo == null)
                {
                    return;
                }

                //3º--> SI CAMBIO EL IMPUESTOCABECERA ###########################################
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idImpuestoCabecera.Equals(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Id))
                {
                    return;
                }


                //Argumentos
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Id);

                //(Tarea Asincrona) Cargar Datos .....................................................
                g_obj_TareaAsincrona_Cambio_ImpuestoCabecera.RunWorkerAsync(lst_Argumentos);
                //....................................................................................

                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_VALIDANDODATOS());
                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_AlbaranCabecera_Controladora) + "/" + nameof(Cambio_ImpuestoCabecera));
            }
        }

        private void TareaAsincrona_Cambio_ImpuestoCabecera_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Objeto = null;
            try
            {
                //Argumentos #################################################################
                List<object> lst_Argumentos = (List<object>)e.Argument;
                //idImpuestoCabecera
                long lng_idImpuestoCabecera = (long)lst_Argumentos[0];
                //############################################################################

                //Recorrer las Lineas para validar que los impuestosTipo del articulo existen para la fecha y el ImpuestoCabecera
                foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo)
                {
                    bool? bol_Existe = Datos_Generales.GEN_ImpuestosLineas_Existe(lng_idImpuestoCabecera, mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idImpuestoTipo.Value, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha);
                    if (bol_Existe == null || bol_Existe == false)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;

                        string str_Articulo = "(" + mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_Codigo + ") " + mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_Descripcion;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_IMPUESTOTIPO_NOACTIVO_ARTICULOFECHA(str_Articulo, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha.ToString("dd/MM/yyyy"));
                        break;
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_ImpuestoCabecera_DoWork));
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_ImpuestoCabecera_DoWork));
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_Cambio_ImpuestoCabecera_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            //Cerrar pantalla de espera
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

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

                //Mostrar si tuviera algun mensaje de Error
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    //Mostrar el mensaje s lo tuviera
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    }

                    //VOLVER A PONER LOS VALORES ORIGINALES
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
                    {
                        //ImpuestoCabecera
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_ImpuestosCabecera.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_ImpuestosCabecera.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_ImpuestosCabecera.descripcion;
                        g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_ImpuestosCabecera.fechaBorrado;

                        //Poner el Foco 
                        Funciones.Poner_Foco_Objeto(g_frm_P_AlbaranCabecera, g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_ImpuestoCabecera);
                    }
                }
                else
                {
                    //Actualiar los importes e impuestos, buscando el ImpuestoCabecera nuevo
                    Actualizar_ImportesImpuestos(false, true);

                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_ImpuestoCabecera_Completed));
            }
        }

        #endregion

        #region Cambio Servicio
        public void Cambio_Servicio(long? _lng_idRelacionClienteProveedor,bool _bol_Preguntar_LineasFueraServicio)
        {
            try
            {
                //## 1º--> CANCELAMOS SI LA TAREA SE ESTUVIERA EJECUTANDO #########################
                if (g_obj_TareaAsincrona_Cambio_Servicio!=null)
                {
                    g_obj_TareaAsincrona_Cambio_Servicio.CancelAsync();
                    while (g_obj_TareaAsincrona_Cambio_Servicio.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_obj_TareaAsincrona_Cambio_Servicio = new BackgroundWorker();
                    g_obj_TareaAsincrona_Cambio_Servicio.DoWork += new DoWorkEventHandler(TareaAsincrona_Cambio_Servicio_DoWork);
                    g_obj_TareaAsincrona_Cambio_Servicio.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Cambio_Servicio_Completed);
                    g_obj_TareaAsincrona_Cambio_Servicio.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Cambio_Servicio.WorkerSupportsCancellation = true;
                }
                
                //3º--> SI CAMBIO EL SERVICIO ###########################################
                if (_lng_idRelacionClienteProveedor!=null &&
                    g_mdl_SRV_Relacion_ClienteProveedor != null &&
                    g_mdl_SRV_Relacion_ClienteProveedor.id.Equals(_lng_idRelacionClienteProveedor.Value))
                {
                    return;
                }

                //preguntar si se borrarn las lineas fuera del servicio
                bool bol_Respuestapregunta = false;
                if (_lng_idRelacionClienteProveedor!=null &&
                    _lng_idRelacionClienteProveedor.Value>-1)
                {
                    if (_bol_Preguntar_LineasFueraServicio)
                    {
                        bol_Respuestapregunta = Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_PEDIDOSVENTA_VALIDACION_LINEAS_FUERASERVICIO());
                    }
                    else
                    {
                        bol_Respuestapregunta = true;
                    }
                    
                }

                //Lineas que no pertenezcan a este servcio se borraran
                if (_lng_idRelacionClienteProveedor==null || bol_Respuestapregunta)
                {
                    //vaciar los Valores del modelo y listado de idArticulos
                    g_lst_Ids_Articulos_Servicio = null;
                    g_mdl_SRV_Relacion_ClienteProveedor = null;

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

                    //(Tarea Asincrona) Cargar Datos .....................................................
                    g_obj_TareaAsincrona_Cambio_Servicio.RunWorkerAsync(lst_Argumentos);
                    //....................................................................................

                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_VALIDANDODATOS());
                    g_frm_PE_Esperando.ShowDialog();
                }
                else
                {
                    if (g_mdl_SRV_Relacion_ClienteProveedor != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Id = g_mdl_SRV_Relacion_ClienteProveedor.id;
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Codigo = g_mdl_SRV_Relacion_ClienteProveedor.codigo;
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Descripcion = g_mdl_SRV_Relacion_ClienteProveedor.descripcion;
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_FechaBorrado = g_mdl_SRV_Relacion_ClienteProveedor.fechaBorrado;
                    }
                    else
                    {
                        //Servicio
                        g_lst_Ids_Articulos_Servicio = null;
                        g_mdl_SRV_Relacion_ClienteProveedor = null;

                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Id = -1;
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Codigo = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Descripcion = "";
                        g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_FechaBorrado = null;

                        //NumeroDocumentoManual
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroDocumentoManual.Text = "";

                        //NumeroPedidoCliente
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroPedidoCliente.Text = "";

                        //Identicket
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Identicket.Text = "";

                        //Seccion
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Seccion.Text = "";

                        //Departamento
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Departamento.Text = "";

                        //Bloquear panel
                        g_frm_P_AlbaranCabecera.Panel_Servicio.Visible = false;
                    }
                }
                
            }
            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_AlbaranCabecera_Controladora) + "/" + nameof(Cambio_Servicio));
            }
        }
        private void TareaAsincrona_Cambio_Servicio_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Objeto = null;
            try
            {
                string str_Lineas_Borradas = "";
                List<long> lst_idsLineas_Borradas = new List<long>();

                //Argumentos #################################################################
                List<object> lst_Argumentos = (List<object>)e.Argument;
                //idRelacionClienteProveedor
                long? lng_idRelacionClienteProveedor = (long?)lst_Argumentos[0];
                //############################################################################

                // ## BUSCAR EL MODELO DE LA TABLA RELACION_CLIENTEPROVEEDOR #########################################################################################
                if (lng_idRelacionClienteProveedor != null)
                {
                    //Cargamos el ensamblado
                    Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_SERVICIOS + ".dll");
                    //Obtenemos el tipo de la clase
                    Type m_type = m_assembly.GetType("" + Variables.G_STR_LIBRERIA_SERVICIOS + "." + Variables.G_STR_LIBRERIA_DATOSSERVICIOS);
                    //creamos la instancia
                    var obj_Clase = Activator.CreateInstance(m_type);
                    //Cargamos el metodo solicitado
                    MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSSERVICIOS_PROCEDIMIENTO_SRVRELACIONCLIENTEPROVEEDOR_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                    //Obtener valores
                    object[] arr_Parametros = { lng_idRelacionClienteProveedor.Value };

                    //Pasamos los parametros al metodo y lo ejecutamos
                    g_mdl_SRV_Relacion_ClienteProveedor = (SRV_Relacion_ClienteProveedor)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);

                    if (g_mdl_SRV_Relacion_ClienteProveedor==null)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ALBARANES_VALIDACION_NOENCONTRO_SERVICIO();
                    }
                }

                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    if (g_mdl_SRV_Relacion_ClienteProveedor != null)
                    {
                        // ## BUSCAR LOS ARTICULOS DEL SERVICIO #########################################################################################
                        //Cargamos el ensamblado
                        Assembly m_assembly2 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                        //Obtenemos el tipo de la clase
                        Type m_type2 = m_assembly2.GetType("" + Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                        //creamos la instancia
                        var obj_Clase2 = Activator.CreateInstance(m_type2);
                        //Cargamos el metodo solicitado
                        MethodInfo obj_MethodInfo2 = obj_Clase2.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEARTICULOS_OBTENER_IDS_PARASERVICIO, BindingFlags.Instance | BindingFlags.NonPublic);

                        //Obtener valores
                        object[] arr_Parametros2 = { g_mdl_SRV_Relacion_ClienteProveedor.idProveedor, g_mdl_SRV_Relacion_ClienteProveedor.idAgrupacionArticuloCabecera, g_mdl_SRV_Relacion_ClienteProveedor.idAgrupacionArticuloLinea };

                        //Pasamos los parametros al metodo y lo ejecutamos
                        g_lst_Ids_Articulos_Servicio = (List<long>)obj_MethodInfo2.Invoke(obj_Clase2, arr_Parametros2);

                        //Recorrer las Lineas para validar que los articulos que estan, son para el servicio Selelccionado
                        if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                            g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                        {
                            List<INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo> lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idAlbaranFacturaLinea_Padre == null && m.idArticulo != null).ToList();
                            if (lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA != null)
                            {
                                bool bol_Borrar = false;
                                foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA)
                                {
                                    bol_Borrar = false;

                                    // COMPROBAR SI HAY QUE BORRAR EL REGISTRO ################################################################################ 
                                    if (g_lst_Ids_Articulos_Servicio != null && g_lst_Ids_Articulos_Servicio.Count > 0)
                                    {
                                        //Si no existe en el listado se borra
                                        if (!g_lst_Ids_Articulos_Servicio.Contains(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticulo.Value))
                                        {
                                            str_Lineas_Borradas += " ◘ LINEA Nº:" + mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.numeroLineaAlbaran + " (" + mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_Codigo + ") " + mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_Descripcion + System.Environment.NewLine;

                                            bol_Borrar = true;
                                        }
                                    }
                                    //Borrar
                                    else
                                    {
                                        bol_Borrar = true;
                                    }

                                    // BORRAR ################################################################################ 
                                    if (bol_Borrar)
                                    {
                                        //Linea Principal
                                        INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.id.Equals(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)).FirstOrDefault();
                                        if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA != null)
                                        {
                                            //Añadir al listado
                                            lst_idsLineas_Borradas.Add(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA.id);

                                            //Lo Borro del Listado
                                            g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Remove(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA);
                                        }

                                        //Linea en promocion
                                        INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA_RELACIONADA = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idAlbaranFacturaLinea_Padre != null && m.idAlbaranFacturaLinea_Padre.Value.Equals(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.id)).FirstOrDefault();
                                        if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA_RELACIONADA != null)
                                        {
                                            //Añadir al listado
                                            lst_idsLineas_Borradas.Add(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA_RELACIONADA.id);

                                            //Lo Borro del Listado
                                            g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Remove(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo_BUSQUEDA_RELACIONADA);
                                        }
                                    }
                                }
                            }
                        }
                    }

                    //GRABAR EN BASE DE DATOS
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
                    {
                        using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue))
                        {
                            try
                            {
                                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARCABECERA = g_obj_VTA_AlbaranesCabecera_Datos.Actualizar_RelacionClienteProveedor(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, lng_idRelacionClienteProveedor);
                                if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARCABECERA.TodoCorrecto)
                                {
                                    //Si el idRelacionClienteproveedor es nulo, borro el Anexo
                                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo!=null &&
                                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos !=null &&
                                         g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos.Count>0 &&
                                        lng_idRelacionClienteProveedor == null)
                                    {
                                        INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Anexos_Borrar = g_obj_VTA_AlbaranesCabecera_Anexos_Datos.Borrar(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos.FirstOrDefault().id);
                                        if (mdl_ValorDevuelto_Modelo_Anexos_Borrar.TodoCorrecto == false)
                                        {
                                            mdl_INTERNO_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_Anexos_Borrar;
                                        }
                                    }

                                    //Lineas
                                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                                    {
                                        //Borrar las lineas en base de datos
                                        if (lst_idsLineas_Borradas != null && lst_idsLineas_Borradas.Count > 0)
                                        {
                                            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_BORRARLINEAS = Borrar_Registro_AlbaranLinea_EnBaseDatos_Final(lst_idsLineas_Borradas);
                                            if (mdl_ValorDevuelto_Modelo_BORRARLINEAS.TodoCorrecto == false)
                                            {
                                                mdl_INTERNO_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_BORRARLINEAS;
                                            }
                                            else
                                            {
                                                // ACTUALIAZMOS EL lng_idRelacionClienteProveedor EN EL MODELO GENERAL DE LA CABECERA
                                                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idRelacionClienteProveedor = lng_idRelacionClienteProveedor;

                                                transaccion_SQL.Complete();
                                            }
                                        }
                                        else
                                        {
                                            // ACTUALIAZMOS EL lng_idRelacionClienteProveedor EN EL MODELO GENERAL DE LA CABECERA
                                            g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idRelacionClienteProveedor = lng_idRelacionClienteProveedor;

                                            transaccion_SQL.Complete();
                                        }
                                    }
                                }
                                else
                                {
                                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARCABECERA;
                                }
                            }
                            catch (Control_Errores)
                            {
                                transaccion_SQL.Dispose();
                            }
                            catch (Exception ex)
                            {
                                transaccion_SQL.Dispose();
                                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Servicio_DoWork));
                            }
                        }
                    }


                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        //Actualiazr el listado de las lineas, para poder cogerlas desde la pantalla de AlbaranLinea
                        if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                            g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                        {
                            g_frm_P_AlbaranCabecera.P_Base_Objetos_Listado = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idAlbaranFacturaLinea_Padre == null).Select(m => new INTERNO_Listado_CamposClave_Modelo
                            {
                                ID = m.id,
                                ID_Aux1 = (m.idArticulo != null ? m.idArticulo.Value : -1),
                                Dato_Auxiliar = (m.Articulo_Codigo + " - " + m.Articulo_Descripcion),
                                ID_Aux2 = (m.idArticuloComodin != null ? m.idArticuloComodin.Value : -1),
                                Dato_Auxiliar2 = (m.ArticuloComodin_Codigo + " - " + m.descripcionArticuloComodin)
                            }).ToList();
                        }
                        else
                        {
                            g_frm_P_AlbaranCabecera.P_Base_Objetos_Listado = null;
                        }

                        //mensaje de Advertenia si se hubieran borrado lineas
                        if (str_Lineas_Borradas.Trim().Length > 0)
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "LINEAS BORRADAS POR SER DE OTRO SERVICIO " + System.Environment.NewLine +
                                                                        str_Lineas_Borradas;
                        }


                        //El id utilizado
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto_Auxiliar_1 = lng_idRelacionClienteProveedor;
                    }
                }

            }
            catch (ThreadAbortException ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Servicio_DoWork));
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ERROR_GRABAR();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Servicio_DoWork));
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_Cambio_Servicio_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            //Cerrar pantalla de espera
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

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

                //Mostrar el mensaje s lo tuviera
                if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje!=null && mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                {
                    Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                }

                //Mostrar si tuviera algun mensaje de Error
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto )
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Objeto_Auxiliar_1!=null)
                    {
                        g_frm_P_AlbaranCabecera.Panel_Servicio.Visible = true;
                        //poner el Foco
                        Funciones.Poner_Foco_Objeto(g_frm_P_AlbaranCabecera, g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroDocumentoManual);

                        Rellenar_DataGrid_AlbaranLinea();
                    }
                    else
                    {
                        //NumeroDocumentoManual
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroDocumentoManual.Text = "";
                        //NumeroAlbaranCliente
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroPedidoCliente.Text = "";
                        //Identicket
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Identicket.Text = "";
                        //Seccion
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Seccion.Text = "";
                        //Departamento
                        g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Departamento.Text = "";

                        g_frm_P_AlbaranCabecera.Panel_Servicio.Visible = false;
                    }
                    
                }

                //Actualiazr los importes
                Actualizar_ImportesImpuestos(false, true);
                g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;

                //Se actualizan el listado general, solo cuando ya estaba grabado la linea
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
                {
                    // Devolver al Listado el Row Añadido/Modificado
                    if (g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                    }
                    else if (g_frm_P_AlbaranCabecera.P_Base_F3Origen != null)
                    {
                        g_frm_P_AlbaranCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Servicio_Completed));
            }
        }

        private void Mostrar_ServiciosCliente()
        {
            try
            {
                //Si tiene Cliente 
                if (g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Id>-1)
                {
                    //Cargamos el ensamblado ##############################################################################################
                    Assembly m_assembly_2 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_SERVICIOS + ".dll");
                    //Obtenemos el tipo de la clase
                    Type m_type_2 = m_assembly_2.GetType("" + Variables.G_STR_LIBRERIA_SERVICIOS + "." + Variables.G_STR_LIBRERIA_DATOSSERVICIOS);
                    //Creamos la instancia
                    var obj_Clase = Activator.CreateInstance(m_type_2);
                    //Cargamos el metodo solicitado
                    MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSSERVICIOS_PROCEDIMIENTO_SRVRELACIONCLIENTEPROVEEDOR_OBTENER_LISTADO, BindingFlags.Instance | BindingFlags.NonPublic);

                    //Obtener valores
                    object[] arr_Parametros = { g_frm_P_AlbaranCabecera.Exferia_F3_Cliente.Exferia_F3_Id, -1 };

                    List<INTERNO_RelacionClienteProveedor_Modelo> lst_INTERNO_RelacionClienteProveedor_Modelo = (List<INTERNO_RelacionClienteProveedor_Modelo>)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);

                    if (lst_INTERNO_RelacionClienteProveedor_Modelo != null &&
                        lst_INTERNO_RelacionClienteProveedor_Modelo.Count > 1)
                    {
                        //Obtener el Listado .........................
                        ABS_ListadoSeleccion_SRV_Relacion_ClienteProveedor mdl_ABS_ListadoSeleccion_SRV_Relacion_ClienteProveedor = new ABS_ListadoSeleccion_SRV_Relacion_ClienteProveedor();
                        mdl_ABS_ListadoSeleccion_SRV_Relacion_ClienteProveedor.Registros = lst_INTERNO_RelacionClienteProveedor_Modelo.Cast<dynamic>().ToList();

                        //Llamar al formualario de ListadoSeleccion
                        PE_Listados_SoloSeleccion frm_PE_Listados_SoloSeleccion = new PE_Listados_SoloSeleccion(mdl_ABS_ListadoSeleccion_SRV_Relacion_ClienteProveedor, g_frm_P_AlbaranCabecera.P_Base_ValoresGenerales, g_frm_P_AlbaranCabecera.P_Base_FechaTrabajo);
                        frm_PE_Listados_SoloSeleccion.ShowDialog();

                        //Si se selecciono algo lo cargo en el F3 correspondiente
                        if (frm_PE_Listados_SoloSeleccion.g_dnm_RegistroSeleccionado != null)
                        {
                            INTERNO_RelacionClienteProveedor_Modelo mdl_INTERNO_RelacionClienteProveedor_Modelo = frm_PE_Listados_SoloSeleccion.g_dnm_RegistroSeleccionado;

                            //Rellenar el F3
                            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Id = mdl_INTERNO_RelacionClienteProveedor_Modelo.id;
                            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Codigo = mdl_INTERNO_RelacionClienteProveedor_Modelo.codigo;
                            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Descripcion = mdl_INTERNO_RelacionClienteProveedor_Modelo.descripcion;
                            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_FechaBorrado = mdl_INTERNO_RelacionClienteProveedor_Modelo.fechaBorrado;

                            //Llamar a la Funcion que hace los cambios segun el Servicio
                            Cambio_Servicio(mdl_INTERNO_RelacionClienteProveedor_Modelo.id,true);
                        }
                        else
                        {
                            //Actualiazr los importes
                            Actualizar_ImportesImpuestos(false, true);
                            g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;

                            //Se actualizan el listado general, solo cuando ya estaba grabado la linea
                            if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
                            {
                                // Devolver al Listado el Row Añadido/Modificado
                                if (g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen != null)
                                {
                                    g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                                }
                                else if (g_frm_P_AlbaranCabecera.P_Base_F3Origen != null)
                                {
                                    g_frm_P_AlbaranCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                                }
                            }
                        }
                    }
                    else
                    {
                        //Actualiazr los importes
                        Actualizar_ImportesImpuestos(false, true);
                        g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;

                        //Se actualizan el listado general, solo cuando ya estaba grabado la linea
                        if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
                        {
                            // Devolver al Listado el Row Añadido/Modificado
                            if (g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen != null)
                            {
                                g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                            }
                            else if (g_frm_P_AlbaranCabecera.P_Base_F3Origen != null)
                            {
                                g_frm_P_AlbaranCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                            }
                        }
                    }
                }
                else
                {
                    //Actualiazr los importes
                    Actualizar_ImportesImpuestos(false, true);
                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;

                    //Se actualizan el listado general, solo cuando ya estaba grabado la linea
                    if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
                    {
                        // Devolver al Listado el Row Añadido/Modificado
                        if (g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen != null)
                        {
                            g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                        else if (g_frm_P_AlbaranCabecera.P_Base_F3Origen != null)
                        {
                            g_frm_P_AlbaranCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                    }
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Mostrar_ServiciosCliente));
            }
        }


        #endregion

        #region Cerrar/Abrir
        public void Mostrar_CerradoAbierto()
        {
            //Por Defecto
            g_str_Estado = Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO;
            //Imagen de Abrir
            g_frm_P_AlbaranCabecera.Exferia_Button_CerrarAbrir.Exferia_Button_Imagen = Imagenes.G_ENUM_IMAGENES.G_IMG_ABIERTO;
            Imagenes.Asignar_Imagen(g_frm_P_AlbaranCabecera.Exferia_Button_CerrarAbrir);
            g_frm_P_AlbaranCabecera.Exferia_Button_CerrarAbrir.Tag = "0";

            //Buscar el Estado del AlbaranCabecera
            if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null)
            {
                //Estado
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.estado != null &&
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.estado.Trim().Length > 0)
                {
                    g_str_Estado = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.estado;
                }
            }

            g_frm_P_AlbaranCabecera.P_Base_EstadoDocumento = g_str_Estado;

            //Si esta Cerrado Bloqueo para que no deje hacer nada
            if (g_str_Estado.Equals(Variables.G_STR_ESTADO_CONTABILIDAD_CERRADO))
            {
                g_frm_P_AlbaranCabecera.Exferia_Button_CerrarAbrir.Exferia_Button_Imagen = Imagenes.G_ENUM_IMAGENES.G_IMG_CERRADO;
                Imagenes.Asignar_Imagen(g_frm_P_AlbaranCabecera.Exferia_Button_CerrarAbrir);
                g_frm_P_AlbaranCabecera.Exferia_Button_CerrarAbrir.Tag = "1";

                //Bloqueo los Controles
                SoloLectura.Empezar(g_frm_P_AlbaranCabecera, true);

                //Mostrar los Botones de Actualizar
                g_frm_P_AlbaranCabecera.Exferia_Button_Anexo_Actualizar.Visible = true;
                g_frm_P_AlbaranCabecera.Exferia_Button_Otros_Actualizar.Visible = true;
                g_frm_P_AlbaranCabecera.Exferia_Button_DatosViaje_Actualizar.Visible = true;
                g_frm_P_AlbaranCabecera.Exferia_Button_Servicio_Actualizar.Visible = true;
                g_frm_P_AlbaranCabecera.Exferia_Button_Observaciones_Actualizar.Visible = true;
            }
            //Abierto
            else
            {
                //Desbloqueo los Controles
                SoloLectura.Empezar(g_frm_P_AlbaranCabecera, false);

                //Ocultar los Botones de Actualizar
                g_frm_P_AlbaranCabecera.Exferia_Button_Anexo_Actualizar.Visible = false;
                g_frm_P_AlbaranCabecera.Exferia_Button_Otros_Actualizar.Visible = false;
                g_frm_P_AlbaranCabecera.Exferia_Button_DatosViaje_Actualizar.Visible = false;
                g_frm_P_AlbaranCabecera.Exferia_Button_Servicio_Actualizar.Visible = false;
                g_frm_P_AlbaranCabecera.Exferia_Button_Observaciones_Actualizar.Visible = false;

                //Situacion
                g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPendiente.Enabled = false;
                g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPagado.Enabled = false;
                g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPartePendiente.Enabled = false;
                g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPendiente.Exferia_Button_Situacion_Seleccionado = true;
                g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPagado.Exferia_Button_Situacion_Seleccionado = false;
                g_frm_P_AlbaranCabecera.Exferia_Button_Situacion_PagoPartePendiente.Exferia_Button_Situacion_Seleccionado = false;
            
                //Activar o desactivar el recargo Equivalencia
                if (g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA != null &&
                    g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA.recargo != null &&
                    g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA.recargo.Value)
                {
                    g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Enabled = true;
                }
                else
                {
                    g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Enabled = false;
                }
            }
        }

        #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_AlbaranCabecera_Controladora) + "/" + nameof(Cerrar_Documento));
            }
        }

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

            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    //Validar
                    mdl_INTERNO_ValorDevuelto_Modelo = ValidarDatos_CerrarDocumento();
                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        //Insertar el idPredefinidoCabecera
                        List<long> lst_idPredefinidoCabecera = new List<long>();

                        //Es de Servicio
                        if (g_mdl_SRV_Relacion_ClienteProveedor != null)
                        {
                            //Validar que tiene un idPredefinidoCabecera para Servicio
                            if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idPredefinidoCabecera_Servicios != null && g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idPredefinidoCabecera_Servicios.Value > 0)
                            {
                                lst_idPredefinidoCabecera.Add(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idPredefinidoCabecera_Servicios.Value);
                            }
                        }
                        else
                        {
                            //Validar que tiene un idPredefinidoCabecera para albaran
                            if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idPredefinidoCabecera_Albaran != null && g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idPredefinidoCabecera_Albaran.Value > 0)
                            {
                                lst_idPredefinidoCabecera.Add(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idPredefinidoCabecera_Albaran.Value);
                            }
                        }

                        //Si esta Todo Correcto
                        if (lst_idPredefinidoCabecera.Count > 0)
                        {
                            //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_INTERNO_VTA_AlbaranesCabecera_Modelo.id,
                                                        g_frm_P_AlbaranCabecera.g_mdl_PRV_OpcionesDetalle.opcion,
                                                        null};

                            //Pasamos los parametros al metodo y lo ejecutamos
                            mdl_INTERNO_ValorDevuelto_Modelo = (INTERNO_ValorDevuelto_Modelo)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                            //########################################################################################################################################################################
                        }
                        //Si no tiene Predefinidos solo se cierra el documento
                        else
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_Datos.Actualizar_Estado(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, Variables.G_STR_ESTADO_CONTABILIDAD_CERRADO);
                        }

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

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

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

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

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

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

                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_ERROR_CERRAR_DOCUMENTO();
                }
                finally
                {
                    e.Result = mdl_INTERNO_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)
            {
                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.estado = Variables.G_STR_ESTADO_CONTABILIDAD_CERRADO;

                Mostrar_CerradoAbierto();

                //Actualizar registro en Listado principal
                if (g_frm_P_AlbaranCabecera.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_INTERNO_VTA_AlbaranesCabecera_Modelo.id, nameof(INTERNO_VTA_AlbaranesCabecera_Listado_Modelo.estado), Variables.G_STR_ESTADO_CONTABILIDAD_CERRADO));

                    g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistros_Campo(lst_INTERNO_ActualizarCampoListadoGeneral_Modelo, G_ENUM_TIPOACCION.INT_MODIFICAR);
                }

                //Actualizar el control de Resumen de Facturas
                g_frm_P_AlbaranCabecera.CTU_Cartera_Ventas_AlbaranCabecera.Rellenar_DataGrid(G_ENUM_CTU_CARTERA_VENTAS_TIPODOCUMENTOFILTRO.AlbaranesCabeceraVenta, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, true);

            }
            //Ocurrio un Error
            else
            {
                Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo_CERRAR_TERMINO.Mensaje);
            }
        }

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

            try
            {
                //Tiene que tener LineasAlbaran
                if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo == null ||
                    g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ALBARANES_VALIDACION_NOHAYLINEAS();
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_Delegacion.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                //Validar las Trazabilidades
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo)
                    {
                        if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null)
                        {
                            //PRINCIPAL
                            if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_TipoTrazabilidad!=null && 
                                mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_TipoTrazabilidad.Equals(Variables.G_MDL_TIPOSTRAZABILIDAD_OBLIGATORIA.Codigo))
                            {
                                //Cantidad trazada
                                decimal dcm_CantidadPrincipal_TotalLineasTrazadas = 0;
                                if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX != null &&
                                    mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX.Count > 0)
                                {
                                    dcm_CantidadPrincipal_TotalLineasTrazadas = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.AlbaranesFacturasLineas_Trazabilidad_AUX.Sum(m => m.cantidad);
                                }

                                //Si no esta trazado completamente
                                if ((mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.cantidad - dcm_CantidadPrincipal_TotalLineasTrazadas) != 0m)
                                {
                                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;

                                    string str_Linea = " linea nº " + mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.numeroLineaAlbaran + " ( " + mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_Codigo + " - " + mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_Descripcion + ")";

                                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ADVERTENCIA_CANTIDADMOVIMIENTO_NOTRAZADOCORRECTAMENTE(str_Linea);

                                    break;
                                }
                            }
                        }
                    }
                }
            }
            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_AlbaranCabecera_Controladora) + "/" + nameof(ValidarDatos_CerrarDocumento));

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

            return mdl_ValorDevuelto_Modelo;
        }

        #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_AlbaranCabecera_Controladora) + "/" + nameof(Abrir_Documento));
            }
        }

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

            try
            {
                mdl_INTERNO_ValorDevuelto_Modelo = ValidarDatos_AbrirDocumento();
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    //Abrir el Documento
                    mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_Datos.Actualizar_Estado(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO);
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Abrir_Documento_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_ERROR_ABRIR_DOCUMENTO();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_ERROR_ABRIR_DOCUMENTO();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Abrir_Documento_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_ERROR_ABRIR_DOCUMENTO();
            }
            finally
            {
                e.Result = mdl_INTERNO_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)
            {
                //Estado
                g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.estado = Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO;

                //Cerrado o Abierto
                Mostrar_CerradoAbierto();

                //Actualizar registro en Listado principal
                if (g_frm_P_AlbaranCabecera.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_INTERNO_VTA_AlbaranesCabecera_Modelo.id, nameof(INTERNO_VTA_AlbaranesCabecera_Listado_Modelo.estado), Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO));
                    
                    g_frm_P_AlbaranCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistros_Campo(lst_INTERNO_ActualizarCampoListadoGeneral_Modelo, G_ENUM_TIPOACCION.INT_MODIFICAR);
                }

                //Actualizar el control de Resumen de Facturas
                g_frm_P_AlbaranCabecera.CTU_Cartera_Ventas_AlbaranCabecera.Rellenar_DataGrid(G_ENUM_CTU_CARTERA_VENTAS_TIPODOCUMENTOFILTRO.AlbaranesCabeceraVenta, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, true);

            }
            //Ocurrio un Error
            else
            {
                Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo_ABRIR_TERMINO.Mensaje);
            }
        }

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

            try
            {
                //Si esta traspasado a la factura no se puede abrir, primero hay que borrar la factura
                INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Where(m => m.idFacturaCabecera != null).FirstOrDefault();
                if (mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ALBARANES_VALIDACION_FACTURARELACIONADA(mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Facturas);
                }

                //Si tiene cobros de alabran no se puede abrir, primero hay que borrar los cobros
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_obj_VTA_CobrosAlbaranes_Datos.Existen_Cobros_De_Albaranes(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id))
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ALBARANES_VALIDACION_ABRIRDOCUMENTO_EXISTENCOBROSREALACIONADOS();
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(ValidarDatos_AbrirDocumento));

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

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #endregion

        #region Recargo
        public void Recargo_ActivarDesactivar()
        {
            try
            {
                //1º--> Ver si permite el Ejercicio de la fecha seleccionada el recargo
                if (g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA != null &&
                    g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA.recargo != null &&
                    g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA.recargo.Value)
                {

                    //2º--> Si ya se seleccionado un cliente ver si tiene recargo equivalencia
                    if (g_bol_Recargo_SEGUNCLIENTE != null)
                    {
                        g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Checked = g_bol_Recargo_SEGUNCLIENTE.Value;
                        g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Enabled = true;
                    }
                    else
                    {
                        g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Checked = false;
                        g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Enabled = false;
                    }
                }
                else
                {
                    g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Checked = false;
                    g_frm_P_AlbaranCabecera.Exferia_CheckBox_RecargoEquivalencia.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Recargo_ActivarDesactivar));
            }
        }
        #endregion

        #region Agregar lineas desde pedidos de Compra
        public void Agregar_Lineas_Desde_Pedidos(List<long> _lst_idsPedidosCabecera)
        {
            try
            {
                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_AGREGANDOLINEAS());

                BackgroundWorker obj_TareaAsincrona_Agregar_Lineas_Desde_PedidosVenta = new BackgroundWorker();

                obj_TareaAsincrona_Agregar_Lineas_Desde_PedidosVenta.DoWork += new DoWorkEventHandler(TareaAsincrona_Agregar_Lineas_Desde_Pedidos_DoWork);
                obj_TareaAsincrona_Agregar_Lineas_Desde_PedidosVenta.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Agregar_Lineas_Desde_Pedidos_Completed);
                obj_TareaAsincrona_Agregar_Lineas_Desde_PedidosVenta.RunWorkerAsync(_lst_idsPedidosCabecera);

                //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_AlbaranCabecera_Controladora) + "/" + nameof(Agregar_Lineas_Desde_Pedidos));
            }
        }

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

            List<long> lst_idsPedidosCabecera = null;

            try
            {
                //Argumentos
                lst_idsPedidosCabecera = (List<long>)e.Argument;

                #region Validar los Datos Obtenidos
                bool bol_ValidacionCorrecta = true;
                //Solo puede tener un pedido de servicio seleccionado
                bool bol_TieneVariosPedidosServicio = g_obj_VTA_PedidosCabecera_Datos.TieneVariosPedidosServicio(lst_idsPedidosCabecera);
                if (bol_TieneVariosPedidosServicio)
                {
                    bol_ValidacionCorrecta = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ALBARANES_VALIDACION_SOLOUNPEDIDOSERVICIOPORALBARAN();
                }

                //No se pueden mezclar en un mismo albaran pedidos de servicio y normales
                if (bol_ValidacionCorrecta)
                {
                    bool bol_TieneMezcladosPedidosServicioYNormales = g_obj_VTA_PedidosCabecera_Datos.TieneMezcladosPedidosServicioYNormales(lst_idsPedidosCabecera);
                    if (bol_TieneMezcladosPedidosServicioYNormales)
                    {
                        bol_ValidacionCorrecta = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ALBARANES_VALIDACION_NOMEZCLARPEDIDOSSERVICIO();
                    }
                }
                #endregion

                if (bol_ValidacionCorrecta)
                {
                    //Numero de linea
                    int int_NumeroLinea = 1;
                    if (g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo != null &&
                        g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Count > 0)
                    {
                        int_NumeroLinea = g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Max(m => m.numeroLineaAlbaran);
                    }

                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_REGISTROSAGRABAR = VTA_AlbaranesFacturasLineas_AGrabar(lst_idsPedidosCabecera, int_NumeroLinea);

                    //Si esta todo Correcto se graba
                    if (mdl_INTERNO_ValorDevuelto_Modelo_REGISTROSAGRABAR.TodoCorrecto)
                    {
                        //Iniciar transaccion
                        using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue))
                        {
                            try
                            {
                                List<VTA_AlbaranesFacturasLineas> lst_VTA_AlbaranesFacturasLineas_AGRABAR = (List<VTA_AlbaranesFacturasLineas>)mdl_INTERNO_ValorDevuelto_Modelo_REGISTROSAGRABAR.Objeto;

                                // INSERTAMOS LAS LINEAS DE ALBARANES
                                if (lst_VTA_AlbaranesFacturasLineas_AGRABAR != null &&
                                    lst_VTA_AlbaranesFacturasLineas_AGRABAR.Count > 0)
                                {
                                    List<long> lst_idPedidosCabecera_AActualizar = null;
                                    if (mdl_INTERNO_ValorDevuelto_Modelo_REGISTROSAGRABAR.Objeto_Auxiliar_1 != null)
                                    {
                                        lst_idPedidosCabecera_AActualizar = (List<long>)mdl_INTERNO_ValorDevuelto_Modelo_REGISTROSAGRABAR.Objeto_Auxiliar_1;
                                    }

                                    //Insertar lineas
                                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = new INTERNO_ValorDevuelto_Modelo();
                                    mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto = true;
                                    mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.Mensaje = "";

                                    if (lst_VTA_AlbaranesFacturasLineas_AGRABAR != null && lst_VTA_AlbaranesFacturasLineas_AGRABAR.Count > 0)
                                    {
                                        foreach (VTA_AlbaranesFacturasLineas mdl_VTA_AlbaranesFacturasLineas in lst_VTA_AlbaranesFacturasLineas_AGRABAR)
                                        {
                                            g_obj_VTA_AlbaranesFacturasLineas_Datos.Insertar(null,g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo,mdl_VTA_AlbaranesFacturasLineas);
                                        }
                                    }

                                    bool bol_ActualizarEstado_TodoCorrecto = true;
                                    if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                                    {
                                        //Actualiazr el estado de los pedidos involucrados a Servidor
                                        INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARESTADO = null;
                                        if (lst_idPedidosCabecera_AActualizar != null &&
                                            lst_idPedidosCabecera_AActualizar.Count > 0)
                                        {
                                            foreach (long lng_idPedidoCabecera in lst_idPedidosCabecera_AActualizar)
                                            {
                                                mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARESTADO = g_obj_VTA_PedidosCabecera_Datos.Actualizar_Situacion(lng_idPedidoCabecera, int.Parse(Variables.G_MDL_TIPOSITUACION_PEDIDOVENTA_SERVIDO.Codigo));
                                                if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARESTADO.TodoCorrecto == false)
                                                {
                                                    transaccion_SQL.Dispose();
                                                    bol_ActualizarEstado_TodoCorrecto = false;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS;
                                        bol_ActualizarEstado_TodoCorrecto = false;
                                    }

                                    if (bol_ActualizarEstado_TodoCorrecto)
                                    {
                                        //Terminamos la transaccion
                                        transaccion_SQL.Complete();
                                        transaccion_SQL.Dispose();

                                        //Actualizamos el listadod e lineas de la albaran
                                        g_lst_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo = g_obj_VTA_AlbaranesFacturasLineas_Datos.Obtener_Registros_Para_Listado_Por_AlbaranCabecera(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id);
                                    }
                                    else
                                    {
                                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                                        transaccion_SQL.Dispose();
                                    }

                                }

                                transaccion_SQL.Dispose();
                            }
                            catch (Control_Errores)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                                transaccion_SQL.Dispose();
                            }
                            catch (Exception ex)
                            {
                                transaccion_SQL.Dispose();
                                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Agregar_Lineas_Desde_Pedidos_DoWork));
                            }
                        }
                    }
                    else
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_REGISTROSAGRABAR;
                    }
                }

            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Agregar_Lineas_Desde_Pedidos_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_AGREGARLINEAS();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_AGREGARLINEAS();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Agregar_Lineas_Desde_Pedidos_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_AGREGARLINEAS();
            }
            finally
            {
                mdl_INTERNO_ValorDevuelto_Modelo.Objeto_Auxiliar_3 = lst_idsPedidosCabecera;

                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_Agregar_Lineas_Desde_Pedidos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            try
            {
                //Termino 
                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Termino todo Correctamente
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    List<long> lst_idsPedidos = null;
                    if (mdl_INTERNO_ValorDevuelto_Modelo.Objeto_Auxiliar_3!=null)
                    {
                        lst_idsPedidos = (List<long>)mdl_INTERNO_ValorDevuelto_Modelo.Objeto_Auxiliar_3;
                    }

                    //Si es de Servicio, Poner los datos del servicio en la cabecera del albaran
                    long lng_idRelacionClienteProveedor = -1;
                    if (lst_idsPedidos!=null && lst_idsPedidos.Count == 1)
                    {
                        lng_idRelacionClienteProveedor = g_obj_VTA_PedidosCabecera_Datos.EsDeServicio(lst_idsPedidos[0]);
                    }

                    //Si es de Servicio 
                    if (lng_idRelacionClienteProveedor>-1)
                    {
                        //Rellenar el F3
                        //Cargamos el ensamblado
                        Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_SERVICIOS + ".dll");
                        //Obtenemos el tipo de la clase
                        Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_SERVICIOS + "." + Variables.G_STR_LIBRERIA_DATOSSERVICIOS);
                        //creamos la instancia
                        var obj_Clase = Activator.CreateInstance(m_type);
                        //Cargamos el metodo solicitado
                        MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSSERVICIOS_PROCEDIMIENTO_SRVRELACIONCLIENTEPROVEEDOR_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                        //Obtener valores
                        object[] arr_Parametros = { lng_idRelacionClienteProveedor };
                        //Pasamos los parametros al metodo y lo ejecutamos
                        SRV_Relacion_ClienteProveedor mdl_SRV_Relacion_ClienteProveedor = (SRV_Relacion_ClienteProveedor)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);

                        if (mdl_SRV_Relacion_ClienteProveedor!=null)
                        {
                            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Id = mdl_SRV_Relacion_ClienteProveedor.id;
                            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Codigo = mdl_SRV_Relacion_ClienteProveedor.codigo;
                            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_Descripcion = mdl_SRV_Relacion_ClienteProveedor.descripcion;
                            g_frm_P_AlbaranCabecera.Exferia_F3_Servicio.Exferia_F3_FechaBorrado = mdl_SRV_Relacion_ClienteProveedor.fechaBorrado;

                            Cambio_Servicio(lng_idRelacionClienteProveedor,false);
                        }
                    }
                    else
                    {
                        //Rellenar Grids
                        Rellenar_DataGrid_AlbaranLinea();
                        Actualizar_ImportesImpuestos(false, false);
                    }
                }
                else
                {
                    Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo.Mensaje);
                }
            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Agregar_Lineas_Desde_Pedidos_Completed));
            }
        }

        private INTERNO_ValorDevuelto_Modelo VTA_AlbaranesFacturasLineas_AGrabar(List<long> _lst_idsPedidosCabecera,
                                                                                  int _int_NumeroLinea)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";

            List<long> lst_idPedidosCabecera_Actualizar = new List<long>();

            try
            {
                List<VTA_AlbaranesFacturasLineas> lst_VTA_AlbaranesFacturasLineas = new List<VTA_AlbaranesFacturasLineas>();

                foreach (long lng_idPedidoCabecera in _lst_idsPedidosCabecera)
                {
                    //Obtener las lineas de la cabecera seleccionada
                    List<INTERNO_VTA_PedidosLineas_Modelo> lst_INTERNO_VTA_PedidosLineas_Modelo = g_obj_VTA_PedidosLineas_Datos.Obtener_ParaTraspaso_Por_PedidoCabecera(lng_idPedidoCabecera);

                    if (lst_INTERNO_VTA_PedidosLineas_Modelo != null && lst_INTERNO_VTA_PedidosLineas_Modelo.Count > 0)
                    {
                        INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_CALCULADOS = null;
                        foreach (INTERNO_VTA_PedidosLineas_Modelo mdl_INTERNO_VTA_PedidosLineas_Modelo in lst_INTERNO_VTA_PedidosLineas_Modelo.Where(m => m.idPedidoLinea_Padre == null))
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo_CALCULADOS = Calcular_CantidadesRestantes(mdl_INTERNO_VTA_PedidosLineas_Modelo);
                            if (mdl_INTERNO_ValorDevuelto_Modelo_CALCULADOS.TodoCorrecto == false)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_CALCULADOS;

                                break;
                            }
                            else
                            {
                                //Si no es se inserta
                                if ((decimal)mdl_INTERNO_ValorDevuelto_Modelo_CALCULADOS.Objeto_Auxiliar_1 != 0m)
                                {
                                    //Añadir la linea
                                    lst_VTA_AlbaranesFacturasLineas.Add(VTA_AlbaranesFacturasLineas_Convertir(ref _int_NumeroLinea,
                                                                                                              mdl_INTERNO_VTA_PedidosLineas_Modelo,
                                                                                                              (decimal)mdl_INTERNO_ValorDevuelto_Modelo_CALCULADOS.Objeto_Auxiliar_1,
                                                                                                              (decimal)mdl_INTERNO_ValorDevuelto_Modelo_CALCULADOS.Objeto_Auxiliar_2));

                                    if (!lst_idPedidosCabecera_Actualizar.Exists(m=>m.Equals(mdl_INTERNO_VTA_PedidosLineas_Modelo.idPedidoCabecera)))
                                    {
                                        lst_idPedidosCabecera_Actualizar.Add(mdl_INTERNO_VTA_PedidosLineas_Modelo.idPedidoCabecera);
                                    }
                                }
                            }
                        }
                    }
                }

                //Listado de objetos a devolver
                if (lst_VTA_AlbaranesFacturasLineas != null && lst_VTA_AlbaranesFacturasLineas.Count > 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = lst_VTA_AlbaranesFacturasLineas;

                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto_Auxiliar_1 = lst_idPedidosCabecera_Actualizar;
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = null;
                }

            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS();
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(VTA_AlbaranesFacturasLineas_AGrabar));
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        private INTERNO_ValorDevuelto_Modelo Calcular_CantidadesRestantes(INTERNO_VTA_PedidosLineas_Modelo _mdl_INTERNO_VTA_PedidosLineas_Modelo)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";

            try
            {
                //## 1º--> CANTIDADES DE LA LINEA DEL PEDIDO 
                decimal dcm_Cantidad_PEDIDOLINEA_FINAL = _mdl_INTERNO_VTA_PedidosLineas_Modelo.cantidad;
                decimal dcm_Cantidad_SegundaUnidad_PEDIDOLINEA_FINAL = (_mdl_INTERNO_VTA_PedidosLineas_Modelo.segundaUnidad_cantidad != null ? _mdl_INTERNO_VTA_PedidosLineas_Modelo.segundaUnidad_cantidad.Value : 0m);

                //## 2º--> OBTENEMOS LOS REGISTROS YA CALCULADOS DONDE SE HA RELACIONADO YA LA LINEA DE PEDIDO DE VENTA
                List<INTERNO_Calculos_CantidadesRestantes> lst_INTERNO_Calculos_CantidadesRestantes = g_obj_VTA_AlbaranesFacturasLineas_Datos.Obtener_Calculos_Para_CantidadesRestantes(_mdl_INTERNO_VTA_PedidosLineas_Modelo.id);

                //## 3º--> PASAMOS LAS CANTIDADES DE TODAS LAS LINEAS QUE HAYAN 
                if (lst_INTERNO_Calculos_CantidadesRestantes != null &&
                    lst_INTERNO_Calculos_CantidadesRestantes.Count > 0)
                {
                    //## 4º--> RECORRER CADA CALCULO PARA PASARLO AL EMBALAJE PRINCIPAL LOS CALCULOS ################################################################################################
                    decimal dcm_Cantidad_CALCULADOS = 0;

                    foreach (INTERNO_Calculos_CantidadesRestantes mdl_INTERNO_Calculos_CantidadesRestantes in lst_INTERNO_Calculos_CantidadesRestantes)
                    {
                        if (mdl_INTERNO_Calculos_CantidadesRestantes.Cantidad != 0m)
                        {
                            dcm_Cantidad_CALCULADOS += Calculos_FuncionesGenerales.Calcular_Cantidad_SegunEmbalajes(mdl_INTERNO_Calculos_CantidadesRestantes.Embalaje_id,
                                                                                                                    mdl_INTERNO_Calculos_CantidadesRestantes.Embalaje_Operacion,
                                                                                                                    mdl_INTERNO_Calculos_CantidadesRestantes.Embalaje_Relacion,
                                                                                                                    mdl_INTERNO_Calculos_CantidadesRestantes.Cantidad,
                                                                                                                    mdl_INTERNO_Calculos_CantidadesRestantes.EmbalajePrincipal_idEmbalaje,
                                                                                                                    true
                                                                                                                    );
                        }
                    }

                    decimal dcm_Porcentaje_Cancelacion = 0m;
                    if (_mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Articulos!=null)
                    {
                        dcm_Porcentaje_Cancelacion=_mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Articulos.porcentajeCancelacion_Ventas != null ? _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Articulos.porcentajeCancelacion_Ventas.Value : 0m;
                    }

                    //COMPROBAR SI EL CALCULO ESTA HECHO EN EL EMBALAJE PRINCIPAL
                    decimal dcm_Cantidad_Principal_PEDIDOLINEA = Calculos_FuncionesGenerales.Calcular_Cantidad_SegunEmbalajes(_mdl_INTERNO_VTA_PedidosLineas_Modelo.idEmbalaje,
                                                                                                                                    _mdl_INTERNO_VTA_PedidosLineas_Modelo.operacion,
                                                                                                                                    _mdl_INTERNO_VTA_PedidosLineas_Modelo.relacion,
                                                                                                                                    _mdl_INTERNO_VTA_PedidosLineas_Modelo.cantidad,
                                                                                                                                    _mdl_INTERNO_VTA_PedidosLineas_Modelo.embalajePrincipalDelArticulo_idEmbalaje,
                                                                                                                                    true
                                                                                                                                    );
                    bool bol_Servido = false;

                    //CANTIDAD ####################################################################################################
                    decimal dcm_Cantidad_Principal_RESULTADO = dcm_Cantidad_Principal_PEDIDOLINEA - dcm_Cantidad_CALCULADOS;
                    if (dcm_Porcentaje_Cancelacion != 0m)
                    {
                        if (dcm_Cantidad_Principal_RESULTADO >= Funciones.RedondearDecimal(dcm_Cantidad_Principal_PEDIDOLINEA * (dcm_Porcentaje_Cancelacion / 100), 3))
                        {
                            bol_Servido = true;
                        }
                    }
                    else
                    {
                        //Negativo
                        if (dcm_Cantidad_Principal_PEDIDOLINEA < 0)
                        {
                            if (dcm_Cantidad_Principal_RESULTADO >= 0m)
                            {
                                bol_Servido = true;
                            }
                        }
                        //Positivo
                        else
                        {
                            if (dcm_Cantidad_Principal_RESULTADO <= 0)
                            {
                                bol_Servido = true;
                            }
                        }
                    }

                    //Si no esta Servido se pone en las varibles generales
                    if (bol_Servido == false)
                    {
                        //Transformar al Embalaje original otra vez
                        dcm_Cantidad_PEDIDOLINEA_FINAL = Calculos_FuncionesGenerales.Calcular_Cantidad_SegunEmbalajes(_mdl_INTERNO_VTA_PedidosLineas_Modelo.idEmbalaje,
                                                                                                                            _mdl_INTERNO_VTA_PedidosLineas_Modelo.operacion,
                                                                                                                            _mdl_INTERNO_VTA_PedidosLineas_Modelo.relacion,
                                                                                                                            dcm_Cantidad_Principal_RESULTADO,
                                                                                                                            _mdl_INTERNO_VTA_PedidosLineas_Modelo.embalajePrincipalDelArticulo_idEmbalaje,
                                                                                                                            false);

                        dcm_Cantidad_SegundaUnidad_PEDIDOLINEA_FINAL = Calculos_FuncionesGenerales.Calcular_SegundaUnidad(dcm_Cantidad_PEDIDOLINEA_FINAL, _mdl_INTERNO_VTA_PedidosLineas_Modelo.relacion);


                    }
                    else
                    {
                        dcm_Cantidad_PEDIDOLINEA_FINAL = 0;
                        dcm_Cantidad_SegundaUnidad_PEDIDOLINEA_FINAL = 0;
                    }
                }

                //Valores Finales
                mdl_INTERNO_ValorDevuelto_Modelo.Objeto_Auxiliar_1 = dcm_Cantidad_PEDIDOLINEA_FINAL;
                mdl_INTERNO_ValorDevuelto_Modelo.Objeto_Auxiliar_2 = dcm_Cantidad_SegundaUnidad_PEDIDOLINEA_FINAL;
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS();
            }
            catch (Exception ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS();

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Calcular_CantidadesRestantes));
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        private VTA_AlbaranesFacturasLineas VTA_AlbaranesFacturasLineas_Convertir(ref int _int_NumeroLinea,
                                                                                    INTERNO_VTA_PedidosLineas_Modelo _mdl_INTERNO_VTA_PedidosLineas_Modelo,
                                                                                    decimal _dcm_Cantidad,
                                                                                    decimal _dcm_Cantidad_SegundaUnidad)
        {

            VentasCompras_Calculos obj_VentasCompras_Calculos = new VentasCompras_Calculos(Variables.G_INT_TIPOCLIENTEPROVEEDOR_CLIENTE_CODIGO,
                                                                                            g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idCliente.Value,
                                                                                            g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha,
                                                                                            g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idEmpresa,
                                                                                            (_mdl_INTERNO_VTA_PedidosLineas_Modelo.descuentoGeneral != null ? _mdl_INTERNO_VTA_PedidosLineas_Modelo.descuentoGeneral.Value : 0m)
                                                                                            );
            #region Ventas/Compras Calculos

            #region RELLENAR MODELO DE CALCULOS LINEA PRINCIPAL
            INTERNO_VentasCompras_Calculos_Modelo mdl_INTERNO_VentasCompras_Calculos_Modelo = new INTERNO_VentasCompras_Calculos_Modelo();

            //Tipo de Compra Venta
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_TipoCompraVenta_Opcion = _mdl_INTERNO_VTA_PedidosLineas_Modelo.GEN_TiposCompraVenta.opcion;
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_TipoCompraVenta_Id = _mdl_INTERNO_VTA_PedidosLineas_Modelo.idTipoCompraVenta;

            //Articulo
            if (_mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Articulos!=null)
            {
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Articulo_Id = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Articulos.id;
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Articulo_Codigo = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Articulos.codigo;
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Articulo_Descripcion = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Articulos.descripcion;
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Articulo_TipoTrazabilidad = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Articulos.tipoTrazabilidad_Salidas;
            }
            else
            {
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Articulo_Id = -1;
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Articulo_Codigo = "";
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Articulo_Descripcion = "";
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Articulo_TipoTrazabilidad = "";
            }


            //ArticuloComodin
            if (_mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_ArticulosComodin != null)
            {
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_ArticuloComodin_Id = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_ArticulosComodin.id;
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_ArticuloComodin_Codigo = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_ArticulosComodin.codigo;
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_ArticuloComodin_Descripcion = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_ArticulosComodin.descripcion;
            }
            else
            {
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_ArticuloComodin_Id = -1;
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_ArticuloComodin_Codigo = "";
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_ArticuloComodin_Descripcion = "";
            }

            //Impuesto Tipo
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_ImpuestoTipo_Id = _mdl_INTERNO_VTA_PedidosLineas_Modelo.GEN_ImpuestosTipos.id;
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_ImpuestoTipo_Codigo = _mdl_INTERNO_VTA_PedidosLineas_Modelo.GEN_ImpuestosTipos.codigo;
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_ImpuestoTipo_Descripcion = _mdl_INTERNO_VTA_PedidosLineas_Modelo.GEN_ImpuestosTipos.descripcion;

            //NomenclaturaPrecio
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_NomenclaturaPrecio = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_NomenclaturasPrecios;

            //Rellenar el listado de Embalajes
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajesPorArticulo = new List<INTERNO_ComboBox_Modelo>();
            #region Articulos_Embalajes
            //Cargamos el ensamblado
            Assembly m_assembly3 = Assembly.LoadFrom(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
            //Obtenemos el tipo de la clase
            Type m_type3 = m_assembly3.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
            //creamos la instancia
            var obj_Clase3 = Activator.CreateInstance(m_type3);
            //Cargamos el metodo solicitado
            MethodInfo obj_MethodInfo3 = obj_Clase3.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEARTICULOSEMBALAJES_OBTENERMODELOLISTADO_POR_ARTICULO, BindingFlags.Instance | BindingFlags.NonPublic);

            //Obtener valores
            object[] arr_Parametros3 = { _mdl_INTERNO_VTA_PedidosLineas_Modelo.idArticulo };
            //Pasamos los parametros al metodo y lo ejecutamos
            List<MAE_Articulos_Embalajes> lst_MAE_Articulos_Embalajes = (List<MAE_Articulos_Embalajes>)obj_MethodInfo3.Invoke(obj_Clase3, arr_Parametros3);
            #endregion

            if (lst_MAE_Articulos_Embalajes != null &&
                lst_MAE_Articulos_Embalajes.Count > 0)
            {
                foreach (MAE_Articulos_Embalajes mdl_MAE_Articulos_Embalajes in lst_MAE_Articulos_Embalajes)
                {
                    mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajesPorArticulo.Add(new INTERNO_ComboBox_Modelo(mdl_MAE_Articulos_Embalajes.MAE_Embalajes.id.ToString(), mdl_MAE_Articulos_Embalajes.MAE_Embalajes.descripcion, null));
                }
            }

            //idEmbalaje
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Embalaje_Id = _mdl_INTERNO_VTA_PedidosLineas_Modelo.idEmbalaje;

            //Embalaje texto
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Embalaje_Texto = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Embalajes.descripcion;

            // Cantidad principal
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Cantidad_Principal = _dcm_Cantidad;

            //relacion
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Embalaje_Relacion = _mdl_INTERNO_VTA_PedidosLineas_Modelo.relacion;

            //Operacion
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Embalaje_Operacion = _mdl_INTERNO_VTA_PedidosLineas_Modelo.operacion;

            //precio_Cantidad_SegundaUnidad
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajeSegundaUnidad_PrecioCantidadSegundaUnidad = _mdl_INTERNO_VTA_PedidosLineas_Modelo.segundaUnidad_Precio_Cantidad_SegundaUnidad != null ? _mdl_INTERNO_VTA_PedidosLineas_Modelo.segundaUnidad_Precio_Cantidad_SegundaUnidad.Value : 0;

            //idEmbalajeRelacional
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajeSegundaUnidad_Id = _mdl_INTERNO_VTA_PedidosLineas_Modelo.segundaUnidad_idEmbalaje;

            //Descripcion el embalaje relacional
            if (_mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Embalajes1 != null)
            {
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajeSegundaUnidad_Texto = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Embalajes1.descripcion;
            }

            //relacion embalaje segunda unidad
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajeSegundaUnidad_Relacion = _mdl_INTERNO_VTA_PedidosLineas_Modelo.segundaUnidad_relacion != null ? _mdl_INTERNO_VTA_PedidosLineas_Modelo.segundaUnidad_relacion.Value : 1m;

            // Cantidad Secundaria
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Cantidad_Secundaria = _dcm_Cantidad_SegundaUnidad;

            //Precio
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_Precio_Final = _mdl_INTERNO_VTA_PedidosLineas_Modelo.precio;

            //Descuento
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_DescuentoGeneral = _mdl_INTERNO_VTA_PedidosLineas_Modelo.descuentoGeneral != null ? _mdl_INTERNO_VTA_PedidosLineas_Modelo.descuentoGeneral.Value : 0m;

            //NumeroRedondeo
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_NumeroRedondeo = _mdl_INTERNO_VTA_PedidosLineas_Modelo.numeroRedondeo != null ? _mdl_INTERNO_VTA_PedidosLineas_Modelo.numeroRedondeo.Value : 3;

            #region Embalaje Principal del Articulo
            //Embalaje
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajePrincipalDelArticulo_Embalaje_Id = _mdl_INTERNO_VTA_PedidosLineas_Modelo.embalajePrincipalDelArticulo_idEmbalaje;
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajePrincipalDelArticulo_Embalaje_Relacion = _mdl_INTERNO_VTA_PedidosLineas_Modelo.embalajePrincipalDelArticulo_relacion;
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajePrincipalDelArticulo_Embalaje_Operacion = _mdl_INTERNO_VTA_PedidosLineas_Modelo.embalajePrincipalDelArticulo_operacion;
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajePrincipalDelArticulo_Embalaje_Texto = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Embalajes2.descripcion;

            //Listado de los precios de todas las nomenclaturas del embalaje principal del articulo
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajePrincipal_Precios = null;

            //precio 
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajePrincipalDelArticulo_precio = _mdl_INTERNO_VTA_PedidosLineas_Modelo.embalajePrincipalDelArticulo_precio;

            //Embalaje Segunda unidad
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajePrincipalDelArticulo_EmbalajeSegundaUnidad_Id = _mdl_INTERNO_VTA_PedidosLineas_Modelo.embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje;
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajePrincipalDelArticulo_EmbalajeSegundaUnidad_Relacion = _mdl_INTERNO_VTA_PedidosLineas_Modelo.embalajePrincipalDelArticulo_segundaUnidad_relacion != null ? _mdl_INTERNO_VTA_PedidosLineas_Modelo.embalajePrincipalDelArticulo_segundaUnidad_relacion.Value : 1m;
            mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajePrincipalDelArticulo_EmbalajeSegundaUnidad_PrecioCantidadSegundaUnidad = _mdl_INTERNO_VTA_PedidosLineas_Modelo.embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad != null ? _mdl_INTERNO_VTA_PedidosLineas_Modelo.embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad.Value : 0;

            if (_mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Embalajes3 != null)
            {
                mdl_INTERNO_VentasCompras_Calculos_Modelo.PROPIEDAD_EmbalajePrincipalDelArticulo_EmbalajeSegundaUnidad_Texto = _mdl_INTERNO_VTA_PedidosLineas_Modelo.MAE_Embalajes3.descripcion;
            }
            #endregion


            #endregion

            #region RELLENAR CANTIDAD SEGUNDA UNIDAD LINEA PROMOCION POR UNIDAD

            decimal? dcm_PromocionPorUnidad_Cantidad_SegundaUnidad = null;
            if (_mdl_INTERNO_VTA_PedidosLineas_Modelo.Linea_EnPromocion != null)
            {
                // Cantidad Secundaria
                dcm_PromocionPorUnidad_Cantidad_SegundaUnidad = _mdl_INTERNO_VTA_PedidosLineas_Modelo.Linea_EnPromocion.segundaUnidad_cantidad;
            }
            #endregion

            //Rellenar la clase de calculos
            obj_VentasCompras_Calculos.CargaInicial(mdl_INTERNO_VentasCompras_Calculos_Modelo,
                                                      dcm_PromocionPorUnidad_Cantidad_SegundaUnidad,
                                                      _mdl_INTERNO_VTA_PedidosLineas_Modelo.TarifasPromociones);

            #endregion

            #region 1º LINEA PRINCIPAL
            VTA_AlbaranesFacturasLineas mdl_VTA_AlbaranesFacturasLineas = new VTA_AlbaranesFacturasLineas();

            //id
            mdl_VTA_AlbaranesFacturasLineas.id = -1;

            //idFacturaCabecera
            mdl_VTA_AlbaranesFacturasLineas.idFacturaCabecera =null;

            //idAlbaranCabecera
            mdl_VTA_AlbaranesFacturasLineas.idAlbaranCabecera = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id;

            //idTipoCompraVenta
            mdl_VTA_AlbaranesFacturasLineas.idTipoCompraVenta = obj_VentasCompras_Calculos.PROPIEDAD_TipoCompraVenta_Id;
            mdl_VTA_AlbaranesFacturasLineas.GEN_TiposCompraVenta = Datos_Generales.GEN_TiposCompraVenta_Obtener_Modelo_Por_Id(mdl_VTA_AlbaranesFacturasLineas.idTipoCompraVenta);

            //idAlbaranFacturaLinea_PromocionesTarifasAsociadas
            mdl_VTA_AlbaranesFacturasLineas.idAlbaranFacturaLinea_PromocionesTarifasAsociadas = null;

            //idPedidoLinea
            mdl_VTA_AlbaranesFacturasLineas.idPedidoLinea = _mdl_INTERNO_VTA_PedidosLineas_Modelo.id;

            //idArticulo
            if (obj_VentasCompras_Calculos.PROPIEDAD_Articulo_Id>0)
            {
                mdl_VTA_AlbaranesFacturasLineas.idArticulo = obj_VentasCompras_Calculos.PROPIEDAD_Articulo_Id;
            }
            else
            {
                mdl_VTA_AlbaranesFacturasLineas.idArticulo = null;
            }

            //ArticuloComodin
            if (obj_VentasCompras_Calculos.PROPIEDAD_ArticuloComodin_Id > 0)
            {
                //idArticuloComodin
                mdl_VTA_AlbaranesFacturasLineas.idArticuloComodin = obj_VentasCompras_Calculos.PROPIEDAD_ArticuloComodin_Id;
                //descripcionArticuloComodin
                mdl_VTA_AlbaranesFacturasLineas.descripcionArticuloComodin = obj_VentasCompras_Calculos.PROPIEDAD_ArticuloComodin_Texto;
            }
            else
            {
                //idArticuloComodin
                mdl_VTA_AlbaranesFacturasLineas.idArticuloComodin = null;
                //descripcionArticuloComodin
                mdl_VTA_AlbaranesFacturasLineas.descripcionArticuloComodin = "";
            }

            //numeroLineaAlbaran
            mdl_VTA_AlbaranesFacturasLineas.numeroLineaAlbaran = _int_NumeroLinea;

            //numeroLineaFactura
            mdl_VTA_AlbaranesFacturasLineas.numeroLineaFactura = 0;

            //idAlmacen 
            mdl_VTA_AlbaranesFacturasLineas.idAlmacen = _mdl_INTERNO_VTA_PedidosLineas_Modelo.idAlmacen;

            //idUbicacion
            mdl_VTA_AlbaranesFacturasLineas.idUbicacion = _mdl_INTERNO_VTA_PedidosLineas_Modelo.idUbicacion;

            //cantidad
            mdl_VTA_AlbaranesFacturasLineas.cantidad = obj_VentasCompras_Calculos.PROPIEDAD_Cantidad_Principal;

            //idEmbalaje
            mdl_VTA_AlbaranesFacturasLineas.idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_Embalaje_Id;

            //relacion
            mdl_VTA_AlbaranesFacturasLineas.relacion = obj_VentasCompras_Calculos.PROPIEDAD_Cantidad_Principal_Relacion;

            //operacion
            mdl_VTA_AlbaranesFacturasLineas.operacion = obj_VentasCompras_Calculos.PROPIEDAD_Embalaje_Operacion;

            //segundaUnidad_Precio_Cantidad_SegundaUnidad
            mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_Precio_Cantidad_SegundaUnidad = obj_VentasCompras_Calculos.PROPIEDAD_PrecioPor_SegundaUnidad_Entero;

            //segundaUnidad_relacion
            mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_relacion = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajeRelacionado_Relacion;

            //segundaUnidad_idEmbalaje
            mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajeRelacionado_Id;

            //segundaUnidad_cantidad
            if (obj_VentasCompras_Calculos.PROPIEDAD_Embalaje_EsRelacional)
            {
                mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_cantidad = obj_VentasCompras_Calculos.PROPIEDAD_Cantidad_Relacional;
            }
            else
            {
                mdl_VTA_AlbaranesFacturasLineas.segundaUnidad_cantidad = null;
            }

            //idNomenclaturaPrecio
            mdl_VTA_AlbaranesFacturasLineas.idNomenclaturaPrecio = obj_VentasCompras_Calculos.PROPIEDAD_NomenclaturaPrecio_Id;

            //precio
            mdl_VTA_AlbaranesFacturasLineas.precio = obj_VentasCompras_Calculos.PROPIEDAD_Precio;

            //numeroRedondeo
            mdl_VTA_AlbaranesFacturasLineas.numeroRedondeo = obj_VentasCompras_Calculos.PROPIEDAD_NumeroRedondeo;

            //descuentoGeneral
            mdl_VTA_AlbaranesFacturasLineas.descuentoGeneral = obj_VentasCompras_Calculos.PROPIEDAD_DescuentoGeneral;

            //importe
            mdl_VTA_AlbaranesFacturasLineas.importe = obj_VentasCompras_Calculos.PROPIEDAD_Importe;

            //idImpuestoTipo
            mdl_VTA_AlbaranesFacturasLineas.idImpuestoTipo = obj_VentasCompras_Calculos.PROPIEDAD_ImpuestoTipo_Id;

            //idAlbaranFacturaLinea_Padre
            mdl_VTA_AlbaranesFacturasLineas.idAlbaranFacturaLinea_Padre = null;

            //DATOS DEL EMBALAJE PRINCIPAL DEL ARTICULO
            //embalajePrincipalDelArticulo_idEmbalaje
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_IdEmbalaje;

            //embalajePrincipalDelArticulo_relacion
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_relacion = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_Cantidad_Principal_Relacion;

            //embalajePrincipalDelArticulo_operacion
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_operacion = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_Embalaje_Operacion;

            //embalajePrincipalDelArticulo_precio
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_precio = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_Precio;

            //embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_PrecioPor_SegundaUnidad_Entero;

            //embalajePrincipalDelArticulo_segundaUnidad_relacion
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_segundaUnidad_relacion = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Relacion;

            //embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje
            mdl_VTA_AlbaranesFacturasLineas.embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Id;

            _int_NumeroLinea += 1;
            #endregion

            #region 2º COMENTARIOS
            if (_mdl_INTERNO_VTA_PedidosLineas_Modelo.VTA_PedidosLineas_Comentarios != null &&
                _mdl_INTERNO_VTA_PedidosLineas_Modelo.VTA_PedidosLineas_Comentarios.Count > 0)
            {
                mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_Comentarios = new List<VTA_AlbaranesFacturasLineas_Comentarios>();

                foreach (VTA_PedidosLineas_Comentarios mdl_VTA_PedidosLineas_Comentarios in _mdl_INTERNO_VTA_PedidosLineas_Modelo.VTA_PedidosLineas_Comentarios)
                {
                    VTA_AlbaranesFacturasLineas_Comentarios mdl_VTA_AlbaranesFacturasLineas_Comentarios = new VTA_AlbaranesFacturasLineas_Comentarios();

                    mdl_VTA_AlbaranesFacturasLineas_Comentarios.id = -1;
                    mdl_VTA_AlbaranesFacturasLineas_Comentarios.idAlbaranFacturaLinea = -1;
                    mdl_VTA_AlbaranesFacturasLineas_Comentarios.comentario = mdl_VTA_PedidosLineas_Comentarios.comentario;
                    mdl_VTA_AlbaranesFacturasLineas_Comentarios.mostrarImpresion = mdl_VTA_PedidosLineas_Comentarios.mostrarImpresion;
                    
                    //Añadir al Listado
                    mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_Comentarios.Add(mdl_VTA_AlbaranesFacturasLineas_Comentarios);
                }
            }
            else
            {
                mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_Comentarios = null;
            }
            #endregion

            #region 3º TARIFAS/PROMOCIONES
            if (obj_VentasCompras_Calculos.PROPIEDAD_TarifaPromocion_Listado_AGRABAR != null &&
                obj_VentasCompras_Calculos.PROPIEDAD_TarifaPromocion_Listado_AGRABAR.Count > 0)
            {
                mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_TarifasPromociones = new List<VTA_AlbaranesFacturasLineas_TarifasPromociones>();

                foreach (INTERNO_TarifaPromocion_VentasCompras_Modelo mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo in obj_VentasCompras_Calculos.PROPIEDAD_TarifaPromocion_Listado_AGRABAR)
                {
                    VTA_AlbaranesFacturasLineas_TarifasPromociones mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones = new VTA_AlbaranesFacturasLineas_TarifasPromociones();

                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.id = -1;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.idAlbaranFacturaLinea = -1;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.codigo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Codigo;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descripcion = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descripcion;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_1 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_1;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_2 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_2;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_3 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_3;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_4 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_4;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_5 = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_5;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.incremento = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Incremento;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.numeroRedondeo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NumeroRedondeo;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.tipo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Tipo;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.precioFijoDinamico = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_PrecioFijoDinamico != null ? mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_PrecioFijoDinamico.Value : Variables.G_INT_TIPOPRECIO_FIJO_CODIGO;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.precio = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Precio;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.idNomenclaturaPrecio = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NomenclaturaPrecio_Id;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuentoMoneda = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_DescuentoMoneda;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_A = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cantidad_A;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_B = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cantidad_B;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Porcentaje = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Porcentaje;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idArticulo = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Articulo_id;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idEmbalaje = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Embalaje_id;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cancelado = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cancelado;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.orden = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Orden;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.mensaje_Error = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Mensaje_Error;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.desactivado = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Desactivado;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.noAplicarTarifa = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.NoAplicarTarifa;
                    mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.aplicadaEnLinea = mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.AplicadaEnLinea;

                    //CONDICIONANTES #############################################################################################################################
                    if (mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Condicionantes != null &&
                        mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Condicionantes.Count > 0)
                    {
                        mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes = new List<VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes>();

                        foreach (INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo in mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Condicionantes)
                        {
                            VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes = new VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes();

                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.id = -1;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.idAlbaranFacturaLineaTarifaPromocion = -1;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Operador = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Desde_Operador;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Valor = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Desde_Valor;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Operador = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Hasta_Operador;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Valor = mdl_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Hasta_Valor;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.condicionante_Y_O = null;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.importe_Desde_Operador = null;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.importe_Desde_Valor = null;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.importe_Hasta_Operador = null;
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.importe_Hasta_Valor = null;

                            //Añadir al listado e condicionantes
                            mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.Add(mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes);
                        }
                    }
                    else
                    {
                        mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes = null;
                    }

                    //Añadir al Listado
                    mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_TarifasPromociones.Add(mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones);
                }
            }
            else
            {
                mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas_TarifasPromociones = null;
            }
            #endregion

            #region 4º LINEA PROMOCION POR UNIDAD (LINEA RELACIONAL)
            if (obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Existe &&
                _mdl_INTERNO_VTA_PedidosLineas_Modelo.Linea_EnPromocion != null)

            {
                VTA_AlbaranesFacturasLineas mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD = new VTA_AlbaranesFacturasLineas();

                //id
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.id = -1;

                //idFacturaCabecera
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idFacturaCabecera = null;
                
                //idAlbaranCabecera
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idAlbaranCabecera = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id;

                //idTipoCompraVenta 
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idTipoCompraVenta = _mdl_INTERNO_VTA_PedidosLineas_Modelo.Linea_EnPromocion.idTipoCompraVenta;
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.GEN_TiposCompraVenta = Datos_Generales.GEN_TiposCompraVenta_Obtener_Modelo_Por_Id(mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idTipoCompraVenta);

                //idAlbaranFacturaLinea_PromocionesTarifasAsociadas 
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idAlbaranFacturaLinea_PromocionesTarifasAsociadas = null;

                //idPedidoLinea 
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idPedidoLinea = _mdl_INTERNO_VTA_PedidosLineas_Modelo.Linea_EnPromocion.id;

                //idArticulo
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idArticulo = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Articulo_Id;

                //idArticuloComodin
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idArticuloComodin = null;

                //descripcionArticuloComodin
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.descripcionArticuloComodin = "";

                //numeroLineaAlbaran
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.numeroLineaAlbaran = _int_NumeroLinea;

                //numeroLineaFactura
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.numeroLineaFactura = 0;

                //idAlmacen 
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idAlmacen = _mdl_INTERNO_VTA_PedidosLineas_Modelo.Linea_EnPromocion.idAlmacen;

                //idUbicacion
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idUbicacion = null;

                //cantidad
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.cantidad = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Cantidad_Principal;

                //idEmbalaje
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Embalaje_Id;

                //relacion
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.relacion = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Cantidad_Principal_Relacion;

                //operacion
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.operacion = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Embalaje_Operacion;

                //segundaUnidad_Precio_Cantidad_SegundaUnidad
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.segundaUnidad_Precio_Cantidad_SegundaUnidad = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_PrecioPor_SegundaUnidad_Entero;

                //segundaUnidad_relacion
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.segundaUnidad_relacion = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajeRelacionado_Relacion;

                //segundaUnidad_idEmbalaje
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.segundaUnidad_idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajeRelacionado_Id;

                //segundaUnidad_cantidad
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.segundaUnidad_cantidad = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Cantidad_Relacional;

                //idNomenclaturaPrecio
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idNomenclaturaPrecio = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_NomenclaturaPrecio_Id;

                //precio
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.precio = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Precio;

                //numeroRedondeo
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.numeroRedondeo = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_NumeroRedondeo;

                //descuentoGeneral
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.descuentoGeneral = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_DescuentoGeneral;

                //importe
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.importe = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_Importe;

                //idImpuestoTipo
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idImpuestoTipo = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_ImpuestoTipo_Id;

                //idAlbaranFacturaLinea_Padre
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.idAlbaranFacturaLinea_Padre = -1;

                //DATOS DEL EMBALAJE PRINCIPAL DEL ARTICULO
                //embalajePrincipalDelArticulo_idEmbalaje
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.embalajePrincipalDelArticulo_idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_IdEmbalaje;

                //embalajePrincipalDelArticulo_relacion
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.embalajePrincipalDelArticulo_relacion = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_Cantidad_Principal_Relacion;

                //embalajePrincipalDelArticulo_operacion
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.embalajePrincipalDelArticulo_operacion = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_Embalaje_Operacion;

                //embalajePrincipalDelArticulo_precio
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.embalajePrincipalDelArticulo_precio = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_Precio;

                //embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.embalajePrincipalDelArticulo_segundaUnidad_Precio_Cantidad_SegundaUnidad = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_PrecioPor_SegundaUnidad_Entero;

                //embalajePrincipalDelArticulo_segundaUnidad_relacion
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.embalajePrincipalDelArticulo_segundaUnidad_relacion = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Relacion;

                //embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.embalajePrincipalDelArticulo_segundaUnidad_idEmbalaje = obj_VentasCompras_Calculos.PROPIEDAD_PromocionPorUnidad_EmbalajePrincipalDelArticulo_EmbalajeRelacionado_Id;

                //fechaBorrado
                mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.fechaBorrado = null;


                #region 5º COMENTARIOS
                if (_mdl_INTERNO_VTA_PedidosLineas_Modelo.Linea_EnPromocion.VTA_PedidosLineas_Comentarios != null &&
                    _mdl_INTERNO_VTA_PedidosLineas_Modelo.Linea_EnPromocion.VTA_PedidosLineas_Comentarios.Count > 0)
                {
                    mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.VTA_AlbaranesFacturasLineas_Comentarios = new List<VTA_AlbaranesFacturasLineas_Comentarios>();

                    foreach (VTA_PedidosLineas_Comentarios mdl_VTA_PedidosLineas_Comentarios in _mdl_INTERNO_VTA_PedidosLineas_Modelo.Linea_EnPromocion.VTA_PedidosLineas_Comentarios)
                    {
                        VTA_AlbaranesFacturasLineas_Comentarios mdl_VTA_AlbaranesFacturasLineas_Comentarios = new VTA_AlbaranesFacturasLineas_Comentarios();

                        mdl_VTA_AlbaranesFacturasLineas_Comentarios.id = -1;
                        mdl_VTA_AlbaranesFacturasLineas_Comentarios.idAlbaranFacturaLinea = -1;
                        mdl_VTA_AlbaranesFacturasLineas_Comentarios.comentario = mdl_VTA_PedidosLineas_Comentarios.comentario;
                        mdl_VTA_AlbaranesFacturasLineas_Comentarios.mostrarImpresion = mdl_VTA_PedidosLineas_Comentarios.mostrarImpresion;

                        //Añadir al Listado
                        mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.VTA_AlbaranesFacturasLineas_Comentarios.Add(mdl_VTA_AlbaranesFacturasLineas_Comentarios);
                    }
                }
                else
                {
                    mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD.VTA_AlbaranesFacturasLineas_Comentarios = null;
                }
                #endregion

                //Agregar a la Linea
                mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas1 = new List<VTA_AlbaranesFacturasLineas>();
                mdl_VTA_AlbaranesFacturasLineas.VTA_AlbaranesFacturasLineas1.Add(mdl_VTA_AlbaranesFacturasLineas_PROMOCIONPORUNIDAD);

                _int_NumeroLinea += 1;
            }

            #endregion

            return mdl_VTA_AlbaranesFacturasLineas;
        }

        #endregion

        #region Imprimir
        public void Imprimir()
        {
            try
            {
                INTERNO_Informes_Ventas_Albaran mdl_INTERNO_Informes_Ventas_Albaran = new INTERNO_Informes_Ventas_Albaran();

                #region Empresa
                INTERNO_Informes_Ventas_Empresa mdl_INTERNO_Informes_Ventas_Empresa = new INTERNO_Informes_Ventas_Empresa();

                GEN_Empresas mdl_GEN_Empresas=Datos_Generales.GEN_Empresas_Obtener_Modelo_Por_Id(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idEmpresa, false, true, false, false);

                if (mdl_GEN_Empresas!=null)
                {
                    mdl_INTERNO_Informes_Ventas_Empresa.nombreComercial =  mdl_GEN_Empresas.descripcion;
                    mdl_INTERNO_Informes_Ventas_Empresa.razonSocial = mdl_GEN_Empresas.razonSocial;

                    //Direccion
                    GEN_Direcciones mdl_GEN_Direcciones = null;
                    if (mdl_GEN_Empresas.GEN_Direcciones != null)
                    {
                        mdl_GEN_Direcciones = mdl_GEN_Empresas.GEN_Direcciones.ToList().Where(m => m.tipoDireccion == Variables.G_STR_TIPODIRECCION_FACTURACION).FirstOrDefault();
                    }
                    if (mdl_GEN_Direcciones != null)
                    {
                        mdl_INTERNO_Informes_Ventas_Empresa.nombreVia = mdl_GEN_Direcciones.nombreVia;
                        mdl_INTERNO_Informes_Ventas_Empresa.poblacion = mdl_GEN_Direcciones.GEN_Poblaciones!=null ? mdl_GEN_Direcciones.GEN_Poblaciones.descripcion : "" ;
                        mdl_INTERNO_Informes_Ventas_Empresa.municipio = mdl_GEN_Direcciones.GEN_Municipios != null ? mdl_GEN_Direcciones.GEN_Municipios.descripcion : "";
                        mdl_INTERNO_Informes_Ventas_Empresa.provincia = mdl_GEN_Direcciones.GEN_Provincias != null ? mdl_GEN_Direcciones.GEN_Provincias.descripcion : "";
                        mdl_INTERNO_Informes_Ventas_Empresa.pais = mdl_GEN_Direcciones.GEN_Paises != null ? mdl_GEN_Direcciones.GEN_Paises.descripcion : "";
                        mdl_INTERNO_Informes_Ventas_Empresa.codigoPostal = mdl_GEN_Direcciones.codigoPostal;
                    }
                    else
                    {
                        mdl_INTERNO_Informes_Ventas_Empresa.nombreVia = "";
                        mdl_INTERNO_Informes_Ventas_Empresa.poblacion = "";
                        mdl_INTERNO_Informes_Ventas_Empresa.municipio = "";
                        mdl_INTERNO_Informes_Ventas_Empresa.provincia = "";
                        mdl_INTERNO_Informes_Ventas_Empresa.pais = "";
                        mdl_INTERNO_Informes_Ventas_Empresa.codigoPostal = "";
                    }
                   
                    mdl_INTERNO_Informes_Ventas_Empresa.cif = mdl_GEN_Empresas.nif;
                    mdl_INTERNO_Informes_Ventas_Empresa.telefono = mdl_GEN_Empresas.telefonoOficina;
                    mdl_INTERNO_Informes_Ventas_Empresa.fax = mdl_GEN_Empresas.telefonoFax;
                    mdl_INTERNO_Informes_Ventas_Empresa.email = mdl_GEN_Empresas.email;
                }
                else
                {
                    mdl_INTERNO_Informes_Ventas_Empresa.nombreComercial = "";
                    mdl_INTERNO_Informes_Ventas_Empresa.razonSocial = "";
                    mdl_INTERNO_Informes_Ventas_Empresa.nombreVia = "";
                    mdl_INTERNO_Informes_Ventas_Empresa.poblacion = "";
                    mdl_INTERNO_Informes_Ventas_Empresa.municipio = "";
                    mdl_INTERNO_Informes_Ventas_Empresa.provincia = "";
                    mdl_INTERNO_Informes_Ventas_Empresa.pais = "";
                    mdl_INTERNO_Informes_Ventas_Empresa.codigoPostal = "";
                    mdl_INTERNO_Informes_Ventas_Empresa.cif = "";
                    mdl_INTERNO_Informes_Ventas_Empresa.telefono = "";
                    mdl_INTERNO_Informes_Ventas_Empresa.fax = "";
                    mdl_INTERNO_Informes_Ventas_Empresa.email = "";
                }

                mdl_INTERNO_Informes_Ventas_Albaran.Empresa = mdl_INTERNO_Informes_Ventas_Empresa;
                #endregion

                #region Cliente
                INTERNO_Informes_Ventas_Cliente mdl_INTERNO_Informes_Ventas_Cliente = new INTERNO_Informes_Ventas_Cliente();
                GEN_Direcciones mdl_GEN_Direcciones_ENVIO = null;
                if (g_mdl_MAE_Clientes != null)
                {
                    mdl_INTERNO_Informes_Ventas_Cliente.nombreComercial = g_mdl_MAE_Clientes.nombreComercial;
                    mdl_INTERNO_Informes_Ventas_Cliente.razonSocial = g_mdl_MAE_Clientes.razonSocial;

                    //Direccion
                    GEN_Direcciones mdl_GEN_Direcciones = null;
                    if (g_mdl_MAE_Clientes.GEN_Direcciones != null)
                    {
                        mdl_GEN_Direcciones = g_mdl_MAE_Clientes.GEN_Direcciones.ToList().Where(m => m.tipoDireccion == Variables.G_STR_TIPODIRECCION_FACTURACION).FirstOrDefault();

                        mdl_GEN_Direcciones_ENVIO = g_mdl_MAE_Clientes.GEN_Direcciones.ToList().Where(m => m.tipoDireccion == Variables.G_STR_TIPODIRECCION_ENVIO).FirstOrDefault();
                    }
                    if (mdl_GEN_Direcciones != null)
                    {
                        mdl_INTERNO_Informes_Ventas_Cliente.nombreVia = mdl_GEN_Direcciones.nombreVia;
                        mdl_INTERNO_Informes_Ventas_Cliente.poblacion = mdl_GEN_Direcciones.GEN_Poblaciones != null ? mdl_GEN_Direcciones.GEN_Poblaciones.descripcion : "";
                        mdl_INTERNO_Informes_Ventas_Cliente.municipio = mdl_GEN_Direcciones.GEN_Municipios != null ? mdl_GEN_Direcciones.GEN_Municipios.descripcion : "";
                        mdl_INTERNO_Informes_Ventas_Cliente.provincia = mdl_GEN_Direcciones.GEN_Provincias != null ? mdl_GEN_Direcciones.GEN_Provincias.descripcion : "";
                        mdl_INTERNO_Informes_Ventas_Cliente.pais = mdl_GEN_Direcciones.GEN_Paises != null ? mdl_GEN_Direcciones.GEN_Paises.descripcion : "";
                        mdl_INTERNO_Informes_Ventas_Cliente.codigoPostal = mdl_GEN_Direcciones.codigoPostal;
                    }
                    else
                    {
                        mdl_INTERNO_Informes_Ventas_Cliente.nombreVia = "";
                        mdl_INTERNO_Informes_Ventas_Cliente.poblacion = "";
                        mdl_INTERNO_Informes_Ventas_Cliente.municipio = "";
                        mdl_INTERNO_Informes_Ventas_Cliente.provincia = "";
                        mdl_INTERNO_Informes_Ventas_Cliente.pais = "";
                        mdl_INTERNO_Informes_Ventas_Cliente.codigoPostal = "";
                    }

                    mdl_INTERNO_Informes_Ventas_Cliente.cif = g_mdl_MAE_Clientes.cif;
                    mdl_INTERNO_Informes_Ventas_Cliente.telefono = g_mdl_MAE_Clientes.telefono1;
                    mdl_INTERNO_Informes_Ventas_Cliente.codigo = g_mdl_MAE_Clientes.codigo;
                }
                else
                {
                    mdl_INTERNO_Informes_Ventas_Cliente.nombreComercial = "";
                    mdl_INTERNO_Informes_Ventas_Cliente.razonSocial = "";
                    mdl_INTERNO_Informes_Ventas_Cliente.nombreVia = "";
                    mdl_INTERNO_Informes_Ventas_Cliente.poblacion = "";
                    mdl_INTERNO_Informes_Ventas_Cliente.municipio = "";
                    mdl_INTERNO_Informes_Ventas_Cliente.provincia = "";
                    mdl_INTERNO_Informes_Ventas_Cliente.pais = "";
                    mdl_INTERNO_Informes_Ventas_Cliente.codigoPostal = "";
                    mdl_INTERNO_Informes_Ventas_Cliente.cif = "";
                    mdl_INTERNO_Informes_Ventas_Cliente.telefono = "";
                    mdl_INTERNO_Informes_Ventas_Cliente.codigo = "";
                }

                mdl_INTERNO_Informes_Ventas_Albaran.Cliente = mdl_INTERNO_Informes_Ventas_Cliente;
                #endregion

                #region AlbaranCabecera
                //tipoTitulo
                mdl_INTERNO_Informes_Ventas_Albaran.tipoTitulo = "Albarán";

                //numero
                mdl_INTERNO_Informes_Ventas_Albaran.numero = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.numeroAlbaran.ToString();

                //fecha
                mdl_INTERNO_Informes_Ventas_Albaran.fecha = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha.ToString("dd/MM/yyyy");

                //Preventa
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores!=null)
                {
                    mdl_INTERNO_Informes_Ventas_Albaran.vendedorCodigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores.codigo;
                    mdl_INTERNO_Informes_Ventas_Albaran.vendedorDescripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores.nombre;
                }
                //Autoventa
                else if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores5!=null)
                {
                    mdl_INTERNO_Informes_Ventas_Albaran.vendedorCodigo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores5.codigo;
                    mdl_INTERNO_Informes_Ventas_Albaran.vendedorDescripcion = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores5.nombre;
                }
                else
                {
                    mdl_INTERNO_Informes_Ventas_Albaran.vendedorCodigo = "";
                    mdl_INTERNO_Informes_Ventas_Albaran.vendedorDescripcion = "";
                }

                //formaPago
                mdl_INTERNO_Informes_Ventas_Albaran.formaPago = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_FormasPago.descripcion;

                //total
                mdl_INTERNO_Informes_Ventas_Albaran.total = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total!=null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total.Value : 0m;

                //totalBruto
                mdl_INTERNO_Informes_Ventas_Albaran.totalBruto = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_bruto != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_bruto.Value : 0m;

                //totalBaseImponible
                mdl_INTERNO_Informes_Ventas_Albaran.totalBaseImponible = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_baseImponible != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_baseImponible.Value : 0m;

                //totalImpuesto
                mdl_INTERNO_Informes_Ventas_Albaran.totalImpuesto = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_impuesto != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_impuesto.Value : 0m;

                //totalRecargo
                mdl_INTERNO_Informes_Ventas_Albaran.totalRecargo = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_recargo != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_recargo.Value : 0m;

                //totalDescuentoFinalAlbaran
                mdl_INTERNO_Informes_Ventas_Albaran.totalDescuentoFinalAlbaran = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_descuentoFinalAlbaran != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.total_descuentoFinalAlbaran.Value : 0m;

                //descuentoFinalAlbaran
                mdl_INTERNO_Informes_Ventas_Albaran.descuentoFinalAlbaran = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.descuentoFinalAlbaran != null ? g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.descuentoFinalAlbaran.Value : 0m;
                #endregion

                #region Albaran lineas
                List<INTERNO_Informes_Ventas_AlbaranLinea> lst_INTERNO_Informes_Ventas_AlbaranLinea = new List<INTERNO_Informes_Ventas_AlbaranLinea>();
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.AlbaranesFacturasLineas!=null && g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.AlbaranesFacturasLineas.Count>0)
                {
                    foreach (INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo in g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.AlbaranesFacturasLineas)
                    {
                        INTERNO_Informes_Ventas_AlbaranLinea mdl_INTERNO_Informes_Ventas_AlbaranLinea = new INTERNO_Informes_Ventas_AlbaranLinea();

                        mdl_INTERNO_Informes_Ventas_AlbaranLinea.articuloCodigo = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.idArticuloComodin != null ? mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.ArticuloComodin_Codigo : mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_Codigo;
                        mdl_INTERNO_Informes_Ventas_AlbaranLinea.articuloDescripcion = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Articulo_ArticuloComodin_Descripcion;
                        mdl_INTERNO_Informes_Ventas_AlbaranLinea.cantidad = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.cantidad;
                        mdl_INTERNO_Informes_Ventas_AlbaranLinea.descuento = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.Descuento;
                        mdl_INTERNO_Informes_Ventas_AlbaranLinea.importe = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.importe!=null ? mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.importe.Value : 0m ;
                        mdl_INTERNO_Informes_Ventas_AlbaranLinea.precio = mdl_INTERNO_VTA_AlbaranesFacturasLineas_Listado_Modelo.precio;

                        //Añadir al listado
                        lst_INTERNO_Informes_Ventas_AlbaranLinea.Add(mdl_INTERNO_Informes_Ventas_AlbaranLinea);
                    }
                }

                mdl_INTERNO_Informes_Ventas_Albaran.Lineas = lst_INTERNO_Informes_Ventas_AlbaranLinea;
                #endregion

                #region Albaranes Resumen
                List<INTERNO_Informes_Ventas_AlbaranResumen> lst_INTERNO_Informes_Ventas_AlbaranResumen = new List<INTERNO_Informes_Ventas_AlbaranResumen>();
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Resumen != null && g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Resumen.Count > 0)
                {
                    foreach (VTA_AlbaranesCabecera_Resumen mdl_VTA_AlbaranesCabecera_Resumen in g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Resumen)
                    {
                        INTERNO_Informes_Ventas_AlbaranResumen mdl_INTERNO_Informes_Ventas_AlbaranResumen = new INTERNO_Informes_Ventas_AlbaranResumen();

                        mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoDescripcion = mdl_VTA_AlbaranesCabecera_Resumen.GEN_ImpuestosTipos.descripcion;
                         mdl_INTERNO_Informes_Ventas_AlbaranResumen.bruto = mdl_VTA_AlbaranesCabecera_Resumen.bruto;
                        mdl_INTERNO_Informes_Ventas_AlbaranResumen.descuentoFinalAlbaran = mdl_VTA_AlbaranesCabecera_Resumen.descuentoFinalAlbaran_Valor!=null ? mdl_VTA_AlbaranesCabecera_Resumen.descuentoFinalAlbaran_Valor.Value : 0m;
                        mdl_INTERNO_Informes_Ventas_AlbaranResumen.baseImponible = mdl_VTA_AlbaranesCabecera_Resumen.baseImponible;
                        mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoPorcentaje = mdl_VTA_AlbaranesCabecera_Resumen.impuesto_Porcentaje;
                        mdl_INTERNO_Informes_Ventas_AlbaranResumen.impuestoValor = mdl_VTA_AlbaranesCabecera_Resumen.impuesto_Valor;
                        mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoPorcentaje = mdl_VTA_AlbaranesCabecera_Resumen.recargo_Porcentaje;
                        mdl_INTERNO_Informes_Ventas_AlbaranResumen.recargoValor = mdl_VTA_AlbaranesCabecera_Resumen.recargo_Valor;
                        mdl_INTERNO_Informes_Ventas_AlbaranResumen.total = mdl_VTA_AlbaranesCabecera_Resumen.total;

                        //Añadir al listado
                        lst_INTERNO_Informes_Ventas_AlbaranResumen.Add(mdl_INTERNO_Informes_Ventas_AlbaranResumen);
                    }
                }

                mdl_INTERNO_Informes_Ventas_Albaran.Resumen = lst_INTERNO_Informes_Ventas_AlbaranResumen;



                #endregion

                #region Configuracion Informes
                GEN_EjerciciosActivos_Empresa mdl_GEN_EjerciciosActivos_Empresa = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_FechaEmpresa(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.fecha, g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idEmpresa);

                GEN_Configuracion_Informes mdl_GEN_Configuracion_Informes = Datos_Generales.GEN_Configuracion_Informes_Obtener_Por_IdEjercicio(mdl_GEN_EjerciciosActivos_Empresa.id);
                if (mdl_GEN_Configuracion_Informes != null)
                {
                    //Logo_Superior_Izquierda
                    mdl_INTERNO_Informes_Ventas_Albaran.Logo_Superior_Izquierda = mdl_GEN_Configuracion_Informes.imagen_Logo_SuperiorIzquierda;

                    //TextoFinal
                    mdl_INTERNO_Informes_Ventas_Albaran.TextoFinal = mdl_GEN_Configuracion_Informes.venta_Factura_Informe_TextoFinal;
                }
                #endregion

                #region Anexo
                VTA_AlbaranesCabecera_Anexos mdl_VTA_AlbaranesCabecera_Anexos = null;
                if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos != null)
                {
                    mdl_VTA_AlbaranesCabecera_Anexos = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos.FirstOrDefault();
                }

                if (mdl_VTA_AlbaranesCabecera_Anexos != null &&
                    (
                        (mdl_VTA_AlbaranesCabecera_Anexos.cliente != null && mdl_VTA_AlbaranesCabecera_Anexos.cliente.Trim().Length > 0) ||
                        (mdl_VTA_AlbaranesCabecera_Anexos.direccion != null && mdl_VTA_AlbaranesCabecera_Anexos.direccion.Trim().Length > 0) ||
                        mdl_VTA_AlbaranesCabecera_Anexos.idPais != null ||
                        mdl_VTA_AlbaranesCabecera_Anexos.idProvincia != null ||
                        mdl_VTA_AlbaranesCabecera_Anexos.idMunicipio != null ||
                        mdl_VTA_AlbaranesCabecera_Anexos.idPoblacion != null ||
                        (mdl_VTA_AlbaranesCabecera_Anexos.codigoPostal != null && mdl_VTA_AlbaranesCabecera_Anexos.codigoPostal.Trim().Length > 0) ||
                        (mdl_VTA_AlbaranesCabecera_Anexos.nif != null && mdl_VTA_AlbaranesCabecera_Anexos.nif.Trim().Length > 0) ||
                        (mdl_VTA_AlbaranesCabecera_Anexos.telefono_1 != null && mdl_VTA_AlbaranesCabecera_Anexos.telefono_1.Trim().Length > 0) ||
                        (mdl_VTA_AlbaranesCabecera_Anexos.telefono_2 != null && mdl_VTA_AlbaranesCabecera_Anexos.telefono_2.Trim().Length > 0) ||
                        (mdl_VTA_AlbaranesCabecera_Anexos.observaciones != null && mdl_VTA_AlbaranesCabecera_Anexos.observaciones.Trim().Length > 0)
                    ))
                {
                    INTERNO_Informes_Ventas_Anexo mdl_INTERNO_Informes_Ventas_Anexo = new INTERNO_Informes_Ventas_Anexo();
                    mdl_INTERNO_Informes_Ventas_Anexo.cliente = mdl_VTA_AlbaranesCabecera_Anexos.cliente != null ? mdl_VTA_AlbaranesCabecera_Anexos.cliente : "";
                    mdl_INTERNO_Informes_Ventas_Anexo.direccion = mdl_VTA_AlbaranesCabecera_Anexos.direccion != null ? mdl_VTA_AlbaranesCabecera_Anexos.direccion : "";
                    mdl_INTERNO_Informes_Ventas_Anexo.poblacion = mdl_VTA_AlbaranesCabecera_Anexos.idPoblacion != null ? mdl_VTA_AlbaranesCabecera_Anexos.GEN_Poblaciones.descripcion : "";
                    mdl_INTERNO_Informes_Ventas_Anexo.municipio = mdl_VTA_AlbaranesCabecera_Anexos.idMunicipio != null ? mdl_VTA_AlbaranesCabecera_Anexos.GEN_Municipios.descripcion : "";
                    mdl_INTERNO_Informes_Ventas_Anexo.provincia = mdl_VTA_AlbaranesCabecera_Anexos.idProvincia != null ? mdl_VTA_AlbaranesCabecera_Anexos.GEN_Provincias.descripcion : "";
                    mdl_INTERNO_Informes_Ventas_Anexo.pais = mdl_VTA_AlbaranesCabecera_Anexos.idPais != null ? mdl_VTA_AlbaranesCabecera_Anexos.GEN_Paises.descripcion : "";
                    mdl_INTERNO_Informes_Ventas_Anexo.codigoPostal = mdl_VTA_AlbaranesCabecera_Anexos.codigoPostal != null ? mdl_VTA_AlbaranesCabecera_Anexos.codigoPostal : "";
                    mdl_INTERNO_Informes_Ventas_Anexo.nif = mdl_VTA_AlbaranesCabecera_Anexos.nif != null ? mdl_VTA_AlbaranesCabecera_Anexos.nif : "";
                    mdl_INTERNO_Informes_Ventas_Anexo.observaciones = mdl_VTA_AlbaranesCabecera_Anexos.observaciones != null ? mdl_VTA_AlbaranesCabecera_Anexos.observaciones : "";
                    mdl_INTERNO_Informes_Ventas_Anexo.telefono_1 = mdl_VTA_AlbaranesCabecera_Anexos.telefono_1 != null ? mdl_VTA_AlbaranesCabecera_Anexos.telefono_1 : "";
                    mdl_INTERNO_Informes_Ventas_Anexo.telefono_2 = mdl_VTA_AlbaranesCabecera_Anexos.telefono_2 != null ? mdl_VTA_AlbaranesCabecera_Anexos.telefono_2 : "";
                    mdl_INTERNO_Informes_Ventas_Anexo.fax = mdl_VTA_AlbaranesCabecera_Anexos.fax != null ? mdl_VTA_AlbaranesCabecera_Anexos.fax : "";

                    //Rellenar el modelo
                    mdl_INTERNO_Informes_Ventas_Albaran.Anexo = mdl_INTERNO_Informes_Ventas_Anexo;
                }
                else
                {
                    
                    #region Direccion de Instalacion 
                    //Cargamos el ensamblado
                    Assembly m_assembly_DIRECCIONINSTALACION = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MYTHOS + ".dll");
                    //Obtenemos el tipo de la clase
                    Type m_type_DIRECCIONINSTALACION = m_assembly_DIRECCIONINSTALACION.GetType("" + Variables.G_STR_LIBRERIA_MYTHOS + "." + Variables.G_STR_LIBRERIA_DATOSMYTHOS);
                    //creamos la instancia
                    var obj_Clase_DIRECCIONINSTALACION = Activator.CreateInstance(m_type_DIRECCIONINSTALACION);
                    //Cargamos el metodo solicitado
                    MethodInfo obj_MethodInfo_DIRECCIONINSTALACION = obj_Clase_DIRECCIONINSTALACION.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMYTHOS_PROCEDIMIENTO_MYTINSTALACIONESCABECERA_OBTENER_PARA_IMPRESION_ALBARANES, BindingFlags.Instance | BindingFlags.NonPublic);
                    //Obtener valores
                    object[] arr_Parametros_DIRECCIONINSTALACION = { g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id };
                    //Pasamos los parametros al metodo y lo ejecutamos
                    INTERNO_Informes_Ventas_Anexo mdl_INTERNO_Informes_Ventas_Anexo_DIRECCIONINSTALACION = (INTERNO_Informes_Ventas_Anexo)obj_MethodInfo_DIRECCIONINSTALACION.Invoke(obj_Clase_DIRECCIONINSTALACION, arr_Parametros_DIRECCIONINSTALACION);
                    #endregion

                    if (mdl_INTERNO_Informes_Ventas_Anexo_DIRECCIONINSTALACION != null)
                    {
                        //Rellenar el modelo
                        mdl_INTERNO_Informes_Ventas_Albaran.Anexo = mdl_INTERNO_Informes_Ventas_Anexo_DIRECCIONINSTALACION;
                    }
                    //Direccion de Envio del cliente
                    else if (mdl_GEN_Direcciones_ENVIO != null)
                    {
                        INTERNO_Informes_Ventas_Anexo mdl_INTERNO_Informes_Ventas_Anexo = new INTERNO_Informes_Ventas_Anexo();
                        mdl_INTERNO_Informes_Ventas_Anexo.cliente = "";
                        mdl_INTERNO_Informes_Ventas_Anexo.direccion = mdl_GEN_Direcciones_ENVIO.nombreVia != null ? mdl_GEN_Direcciones_ENVIO.nombreVia : "";
                        mdl_INTERNO_Informes_Ventas_Anexo.poblacion = mdl_GEN_Direcciones_ENVIO.idPoblacion != null ? mdl_GEN_Direcciones_ENVIO.GEN_Poblaciones.descripcion : "";
                        mdl_INTERNO_Informes_Ventas_Anexo.municipio = mdl_GEN_Direcciones_ENVIO.idMunicipio != null ? mdl_GEN_Direcciones_ENVIO.GEN_Municipios.descripcion : "";
                        mdl_INTERNO_Informes_Ventas_Anexo.provincia = mdl_GEN_Direcciones_ENVIO.GEN_Provincias.descripcion;
                        mdl_INTERNO_Informes_Ventas_Anexo.pais = mdl_GEN_Direcciones_ENVIO.GEN_Paises.descripcion;
                        mdl_INTERNO_Informes_Ventas_Anexo.codigoPostal = mdl_GEN_Direcciones_ENVIO.codigoPostal;
                        mdl_INTERNO_Informes_Ventas_Anexo.nif = "";
                        mdl_INTERNO_Informes_Ventas_Anexo.observaciones = "";
                        mdl_INTERNO_Informes_Ventas_Anexo.telefono_1 = "";
                        mdl_INTERNO_Informes_Ventas_Anexo.telefono_2 = "";
                        mdl_INTERNO_Informes_Ventas_Anexo.fax = "";

                        //Rellenar el modelo
                        mdl_INTERNO_Informes_Ventas_Albaran.Anexo = mdl_INTERNO_Informes_Ventas_Anexo;
                    }
                }
                #endregion

                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_INFORMES + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType("" + Variables.G_STR_LIBRERIA_INFORMES + "." + Variables.G_STR_LIBRERIA_DATOSINFORMES);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSINFORMES_PROCEDIMIENTO_ABRIRPANTALLA_PIINFORME_ALBARAN, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { mdl_INTERNO_Informes_Ventas_Albaran, Variables.G_LNG_IDCLIENTE_LICENCIAVALIDADO };

                //Pasamos los parametros al metodo y lo ejecutamos
                obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Imprimir));

                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_IMPRIMIR("Albarán"));
            }
        }
        #endregion

        #region Actualizar

        #region Actualizar Anexo_Y_Servicio
        public void Actualizar_Anexo_Y_Servicio()
        {
            try
            {
                g_bol_GrabarDatos_TerminoCorrectamente = true;

                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_ACTUALIZANDODATOS());

                BackgroundWorker obj_TareaAsincrona_Actualizar_Anexo = new BackgroundWorker();
                obj_TareaAsincrona_Actualizar_Anexo.DoWork += new DoWorkEventHandler(TareaAsincrona_Actualizar_Anexo_Y_Servicio_DoWork);
                obj_TareaAsincrona_Actualizar_Anexo.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Actualizar_Anexo_Y_Servicio_Completed);
                obj_TareaAsincrona_Actualizar_Anexo.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;
                }

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_Anexo_Y_Servicio));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA());
            }
        }

        private void TareaAsincrona_Actualizar_Anexo_Y_Servicio_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                // Validar Primero
                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION = ValidarDatos_Anexo_Y_Servicio();
                if (mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION.TodoCorrecto)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = Actualizar_Anexo_Y_Servicio_Final();
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION;
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_Anexo_Y_Servicio_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_Anexo_Y_Servicio_DoWork));

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

            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_AlbaranCabecera, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }
                }
                else
                {
                    g_bol_ModificacionDatosAfectaLineas = false;
                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_Anexo_Y_Servicio_Completed));
            }
        }

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

            try
            {
                
                // Si hay Pais validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

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

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

                //Si hay Poblacion validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(ValidarDatos_Anexo_Y_Servicio));

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

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private INTERNO_ValorDevuelto_Modelo Actualizar_Anexo_Y_Servicio_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";

            try
            {

                //Si hay algo relleno en los objetos de Anexo, se inserta o modifica
                if (g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroDocumentoManual.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroPedidoCliente.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Identicket.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Seccion.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Departamento.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Cliente.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Direccion.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id > -1 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Id > -1 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Id > -1 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Id > -1 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_CodigoPostal.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_CIFNIF_Anexo_NIF.Exferia_TextBox_CIFNIF_Valor.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono1.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono2.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Observaciones.Text.Trim().Length > 0
                    )
                {

                    //Rellenar modelo de Anexos
                    VTA_AlbaranesCabecera_Anexos mdl_VTA_AlbaranesCabecera_Anexos = new VTA_AlbaranesCabecera_Anexos();

                    //idAlbaranCabecera
                    mdl_VTA_AlbaranesCabecera_Anexos.idAlbaranCabecera = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id;

                    //numeroDocumentoManual
                    mdl_VTA_AlbaranesCabecera_Anexos.numeroDocumentoManual = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroDocumentoManual.Text;

                    //numeroPedidoCliente
                    mdl_VTA_AlbaranesCabecera_Anexos.numeroPedidoCliente = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_NumeroPedidoCliente.Text;

                    //identicket
                    mdl_VTA_AlbaranesCabecera_Anexos.identicket = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Identicket.Text;

                    //seccion
                    mdl_VTA_AlbaranesCabecera_Anexos.seccion = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Seccion.Text;

                    //departamento
                    mdl_VTA_AlbaranesCabecera_Anexos.departamento = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_Departamento.Text;

                    //cliente
                    mdl_VTA_AlbaranesCabecera_Anexos.cliente = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Cliente.Text.Trim();

                    //direccion
                    mdl_VTA_AlbaranesCabecera_Anexos.direccion = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Direccion.Text.Trim();

                    //idPais
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id > -1)
                    {
                        mdl_VTA_AlbaranesCabecera_Anexos.idPais = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Pais.Exferia_F3_Id;
                    }
                    else
                    {
                        mdl_VTA_AlbaranesCabecera_Anexos.idPais = null;
                    }

                    //idProvincia
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Id > -1)
                    {
                        mdl_VTA_AlbaranesCabecera_Anexos.idProvincia = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Provincia.Exferia_F3_Id;
                    }
                    else
                    {
                        mdl_VTA_AlbaranesCabecera_Anexos.idProvincia = null;
                    }

                    //idMunicipio
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Id > -1)
                    {
                        mdl_VTA_AlbaranesCabecera_Anexos.idMunicipio = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Municipio.Exferia_F3_Id;
                    }
                    else
                    {
                        mdl_VTA_AlbaranesCabecera_Anexos.idMunicipio = null;
                    }

                    //idPoblacion
                    if (g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Id > -1)
                    {
                        mdl_VTA_AlbaranesCabecera_Anexos.idPoblacion = g_frm_P_AlbaranCabecera.Exferia_F3_Anexo_Poblacion.Exferia_F3_Id;
                    }
                    else
                    {
                        mdl_VTA_AlbaranesCabecera_Anexos.idPoblacion = null;
                    }

                    //codigoPostal
                    mdl_VTA_AlbaranesCabecera_Anexos.codigoPostal = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_CodigoPostal.Text.Trim();

                    //nif
                    mdl_VTA_AlbaranesCabecera_Anexos.nif = g_frm_P_AlbaranCabecera.Exferia_TextBox_CIFNIF_Anexo_NIF.Exferia_TextBox_CIFNIF_Valor.Trim().Length > 0 ? g_frm_P_AlbaranCabecera.Exferia_TextBox_CIFNIF_Anexo_NIF.Exferia_TextBox_CIFNIF_Valor.Trim() : "";

                    //observaciones
                    mdl_VTA_AlbaranesCabecera_Anexos.observaciones = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Observaciones.Text.Trim();

                    //telefono_1
                    mdl_VTA_AlbaranesCabecera_Anexos.telefono_1 = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono1.Text.Trim();

                    //telefono_2
                    mdl_VTA_AlbaranesCabecera_Anexos.telefono_2 = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Telefono2.Text.Trim();

                    //fax
                    mdl_VTA_AlbaranesCabecera_Anexos.fax = g_frm_P_AlbaranCabecera.Exferia_TextBox_Anexo_Fax.Text.Trim();

                    //GRABAR
                    mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_Anexos_Datos.Grabar(mdl_VTA_AlbaranesCabecera_Anexos);
                }
                //Si no hay ningun valor en los objetos de Anexo se Borra
                else if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null &&
                         g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos != null &&
                         g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos.FirstOrDefault() != null)
                {
                    //BORRAR
                    mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_Anexos_Datos.Borrar(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos.FirstOrDefault().id);
                }

                //Si esta Todo Correcto se Actualiza el modelo Principal
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_Anexos = g_obj_VTA_AlbaranesCabecera_Anexos_Datos.Obtener_ModeloListado_Por_AlbaranCabecera(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id, true, true, true, true);
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_Anexo_Y_Servicio_Final));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        #endregion

        #region Actualizar Otros
        public void Actualizar_Otros()
        {
            try
            {
                g_bol_GrabarDatos_TerminoCorrectamente = true;

                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_ACTUALIZANDODATOS());

                BackgroundWorker obj_TareaAsincrona_Actualizar_Otros = new BackgroundWorker();
                obj_TareaAsincrona_Actualizar_Otros.DoWork += new DoWorkEventHandler(TareaAsincrona_Actualizar_Otros_DoWork);
                obj_TareaAsincrona_Actualizar_Otros.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Actualizar_Otros_Completed);
                obj_TareaAsincrona_Actualizar_Otros.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;
                }

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_Otros));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA());
            }
        }

        private void TareaAsincrona_Actualizar_Otros_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                // Validar Primero
                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION = ValidarDatos_Otros();
                if (mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION.TodoCorrecto)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = Actualizar_Otros_Final();
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION;
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_Otros_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_Otros_DoWork));

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

            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_AlbaranCabecera, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }
                }
                else
                {
                    g_bol_ModificacionDatosAfectaLineas = false;
                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_Otros_Completed));
            }
        }

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

            try
            {
                // La Moneda no puede estar Vacio (Obligatorio)
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay la Moneda validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Empleado validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Vendedor (Preventa) validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Vendedor (Preventa habitual) validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Vendedor (Repartidor) validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Vendedor (Cobrador) validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Vendedor (Cobrador habitual) validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Vendedor (Autoventa) validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(ValidarDatos_Otros));

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

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private INTERNO_ValorDevuelto_Modelo Actualizar_Otros_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";

            try
            {
                //idMoneda
                long lng_idMoneda = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Moneda.Exferia_F3_SoloSeleccion_Id;

                //idEmpleado 
                long? lng_idEmpleado = null;
                if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Id != -1)
                { lng_idEmpleado = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Id; }

                //idVendedor_Preventa
                long? lng_idVendedor_Preventa = null;
                if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Id != -1)
                { lng_idVendedor_Preventa = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Preventa.Exferia_F3_SoloSeleccion_Id; }

                //idVendedor_PreventaHabitual
                long? lng_idVendedor_PreventaHabitual = null;
                if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Id != -1)
                { lng_idVendedor_PreventaHabitual = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_PreventaHabitual.Exferia_F3_SoloSeleccion_Id; }

                //idVendedor_Repartidor
                long? lng_idVendedor_Repartidor = null;
                if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Id != -1)
                { lng_idVendedor_Repartidor = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Repartidor.Exferia_F3_SoloSeleccion_Id; }

                //idVendedor_Cobrador
                long? lng_idVendedor_Cobrador = null;
                if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Id != -1)
                { lng_idVendedor_Cobrador = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Cobrador.Exferia_F3_SoloSeleccion_Id; }

                //idVendedor_CobradorHabitual
                long? lng_idVendedor_CobradorHabitual = null;
                if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Id != -1)
                { lng_idVendedor_CobradorHabitual = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_CobradorHabitual.Exferia_F3_SoloSeleccion_Id; }

                //idVendedor_Autoventa
                long? lng_idVendedor_Autoventa = null;
                if (g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Id != -1)
                { lng_idVendedor_Autoventa = g_frm_P_AlbaranCabecera.Exferia_F3_SoloSeleccion_Vendedor_Autoventa.Exferia_F3_SoloSeleccion_Id; }

                //referencia
                string str_referencia = g_frm_P_AlbaranCabecera.Exferia_TextBox_Referencia.Text;

                //ACTUALIZAR
                mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_Datos.Actualizar_Otros( g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id,
                                                                                                        lng_idMoneda,
                                                                                                        lng_idEmpleado,
                                                                                                        lng_idVendedor_Preventa,
                                                                                                        lng_idVendedor_PreventaHabitual,
                                                                                                        lng_idVendedor_Repartidor,
                                                                                                        lng_idVendedor_Cobrador,
                                                                                                        lng_idVendedor_CobradorHabitual,
                                                                                                        lng_idVendedor_Autoventa,
                                                                                                        str_referencia);


                //Si esta Todo Correcto se Actualiza el modelo Principal
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    //Modeda
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idMoneda = lng_idMoneda;
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.GEN_Monedas = Datos_Generales.GEN_Monedas_Obtener_Modelo_Por_Id(lng_idMoneda);

                    //Empleado
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idEmpleado = lng_idEmpleado;
                    if (lng_idEmpleado!=null)
                    {
                        //Cargamos el ensamblado
                        Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                        //Obtenemos el tipo de la clase
                        Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                        //creamos la instancia
                        var obj_Clase = Activator.CreateInstance(m_type);
                        //Cargamos el metodo solicitado
                        MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEEMPLEADOS_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);
                        //Obtener valores
                        object[] arr_Parametros = { lng_idEmpleado.Value };
                        //Pasamos los parametros al metodo y lo ejecutamos
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Empleados = (MAE_Empleados)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
                    }
                    else
                    {
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Empleados = null;
                    }

                    //Vendedor_Preventa
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_Preventa = lng_idVendedor_Preventa;
                    if (lng_idVendedor_Preventa != null)
                    {
                        //Cargamos el ensamblado
                        Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                        //Obtenemos el tipo de la clase
                        Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                        //creamos la instancia
                        var obj_Clase = Activator.CreateInstance(m_type);
                        //Cargamos el metodo solicitado
                        MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEVENDEDORES_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                        //Obtener valores
                        object[] arr_Parametros = { lng_idVendedor_Preventa .Value};
                        //Pasamos los parametros al metodo y lo ejecutamos
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores = (MAE_Vendedores)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
                    }
                    else
                    {
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores = null;
                    }

                    //Vendedor_PreventaHabitual
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_PreventaHabitual = lng_idVendedor_PreventaHabitual;
                    if (lng_idVendedor_PreventaHabitual != null)
                    {
                        //Cargamos el ensamblado
                        Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                        //Obtenemos el tipo de la clase
                        Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                        //creamos la instancia
                        var obj_Clase = Activator.CreateInstance(m_type);
                        //Cargamos el metodo solicitado
                        MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEVENDEDORES_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                        //Obtener valores
                        object[] arr_Parametros = { lng_idVendedor_PreventaHabitual.Value };
                        //Pasamos los parametros al metodo y lo ejecutamos
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores1 = (MAE_Vendedores)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
                    }
                    else
                    {
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores1 = null;
                    }

                    //Vendedor_Repartidor
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_Repartidor = lng_idVendedor_Repartidor;
                    if (lng_idVendedor_Repartidor != null)
                    {
                        //Cargamos el ensamblado
                        Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                        //Obtenemos el tipo de la clase
                        Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                        //creamos la instancia
                        var obj_Clase = Activator.CreateInstance(m_type);
                        //Cargamos el metodo solicitado
                        MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEVENDEDORES_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                        //Obtener valores
                        object[] arr_Parametros = { lng_idVendedor_Repartidor.Value };
                        //Pasamos los parametros al metodo y lo ejecutamos
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores2 = (MAE_Vendedores)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
                    }
                    else
                    {
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores2 = null;
                    }

                    //Vendedor_Cobrador
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_Cobrador = lng_idVendedor_Cobrador;
                    if (lng_idVendedor_Cobrador != null)
                    {
                        //Cargamos el ensamblado
                        Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                        //Obtenemos el tipo de la clase
                        Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                        //creamos la instancia
                        var obj_Clase = Activator.CreateInstance(m_type);
                        //Cargamos el metodo solicitado
                        MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEVENDEDORES_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                        //Obtener valores
                        object[] arr_Parametros = { lng_idVendedor_Cobrador.Value };
                        //Pasamos los parametros al metodo y lo ejecutamos
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores3 = (MAE_Vendedores)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
                    }
                    else
                    {
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores3 = null;
                    }

                    //Vendedor_CobradorHabitual
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_CobradorHabitual = lng_idVendedor_CobradorHabitual;
                    if (lng_idVendedor_CobradorHabitual != null)
                    {
                        //Cargamos el ensamblado
                        Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                        //Obtenemos el tipo de la clase
                        Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                        //creamos la instancia
                        var obj_Clase = Activator.CreateInstance(m_type);
                        //Cargamos el metodo solicitado
                        MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEVENDEDORES_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                        //Obtener valores
                        object[] arr_Parametros = { lng_idVendedor_CobradorHabitual.Value };
                        //Pasamos los parametros al metodo y lo ejecutamos
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores4 = (MAE_Vendedores)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
                    }
                    else
                    {
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores4 = null;
                    }

                    //idVendedor_Autoventa
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.idVendedor_Autoventa = lng_idVendedor_Autoventa;
                    if (lng_idVendedor_Autoventa != null)
                    {
                        //Cargamos el ensamblado
                        Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                        //Obtenemos el tipo de la clase
                        Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                        //creamos la instancia
                        var obj_Clase = Activator.CreateInstance(m_type);
                        //Cargamos el metodo solicitado
                        MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEVENDEDORES_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                        //Obtener valores
                        object[] arr_Parametros = { lng_idVendedor_Autoventa.Value };
                        //Pasamos los parametros al metodo y lo ejecutamos
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores5 = (MAE_Vendedores)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
                    }
                    else
                    {
                        g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.MAE_Vendedores5 = null;
                    }

                    //referencia
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.referencia = str_referencia;
                }

            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_Otros_Final));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        #endregion

        #region Actualizar DatosViaje
        public void Actualizar_DatosViaje()
        {
            try
            {
                g_bol_GrabarDatos_TerminoCorrectamente = true;

                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_ACTUALIZANDODATOS());

                BackgroundWorker obj_TareaAsincrona_Actualizar_DatosViaje = new BackgroundWorker();
                obj_TareaAsincrona_Actualizar_DatosViaje.DoWork += new DoWorkEventHandler(TareaAsincrona_Actualizar_DatosViaje_DoWork);
                obj_TareaAsincrona_Actualizar_DatosViaje.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Actualizar_DatosViaje_Completed);
                obj_TareaAsincrona_Actualizar_DatosViaje.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;
                }

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_DatosViaje));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA());
            }
        }

        private void TareaAsincrona_Actualizar_DatosViaje_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                // Validar Primero
                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION = ValidarDatos_DatosViaje();
                if (mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION.TodoCorrecto)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = Actualizar_DatosViaje_Final();
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION;
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_DatosViaje_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_DatosViaje_DoWork));

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

            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_AlbaranCabecera, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }
                }
                else
                {
                    g_bol_ModificacionDatosAfectaLineas = false;
                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_DatosViaje_Completed));
            }
        }

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

            try
            {
                // La fechacarga debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_DatosViaje_FechaCarga.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 1)//Vacia
                    { }
                    else if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_DatosViaje_FechaCarga.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_DatosViaje_FechaCarga;
                    }
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(ValidarDatos_DatosViaje));

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

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private INTERNO_ValorDevuelto_Modelo Actualizar_DatosViaje_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";

            try
            {
                //Si hay algo relleno en los objetos de Datos Viaje , se inserta o modifica
                if (g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_DatosViaje_FechaCarga.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaVehiculo.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaRemolque.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Origen.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Destino.Text.Trim().Length > 0 ||
                    g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Referencia.Text.Trim().Length > 0)
                {

                    //Rellenar modelo de Datos Viaje 
                    VTA_AlbaranesCabecera_DatosViaje mdl_VTA_AlbaranesCabecera_DatosViaje = new VTA_AlbaranesCabecera_DatosViaje();

                    //fechaCarga
                    if (g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_DatosViaje_FechaCarga.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "")
                    {
                        mdl_VTA_AlbaranesCabecera_DatosViaje.fechaCarga = DateTime.ParseExact(g_frm_P_AlbaranCabecera.Exferia_FechaSeleccion_DatosViaje_FechaCarga.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        mdl_VTA_AlbaranesCabecera_DatosViaje.fechaCarga = null;
                    }
                    //idAlbaranCabecera
                    mdl_VTA_AlbaranesCabecera_DatosViaje.idAlbaranCabecera = g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id;
                    //matriculaVehiculo
                    mdl_VTA_AlbaranesCabecera_DatosViaje.matriculaVehiculo = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaVehiculo.Text;
                    //matriculaRemolque
                    mdl_VTA_AlbaranesCabecera_DatosViaje.matriculaRemolque = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_MatriculaRemolque.Text;
                    //origen
                    mdl_VTA_AlbaranesCabecera_DatosViaje.origen = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Origen.Text;
                    //destino
                    mdl_VTA_AlbaranesCabecera_DatosViaje.destino = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Destino.Text;
                    //referencia
                    mdl_VTA_AlbaranesCabecera_DatosViaje.referencia = g_frm_P_AlbaranCabecera.Exferia_TextBox_Servicio_DatosViaje_Referencia.Text;

                    mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_DatosViaje_Datos.Grabar(mdl_VTA_AlbaranesCabecera_DatosViaje);
                }
                //Si no hay ningun valor en los objetos de Datos Viaje  se Borra
                else if (g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo != null &&
                         g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_DatosViaje != null &&
                         g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_DatosViaje.FirstOrDefault() != null)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_DatosViaje_Datos.Borrar(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_DatosViaje.FirstOrDefault().id);
                }

                //Si esta Todo Correcto se Actualiza el modelo Principal
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.VTA_AlbaranesCabecera_DatosViaje = g_obj_VTA_AlbaranesCabecera_DatosViaje_Datos.Obtener_ModeloListado_Por_AlbaranCabecera(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id);
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_DatosViaje_Final));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        #endregion

        #region Actualizar Observaciones
        public void Actualizar_Observaciones()
        {
            try
            {
                g_bol_GrabarDatos_TerminoCorrectamente = true;

                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_ACTUALIZANDODATOS());

                BackgroundWorker obj_TareaAsincrona_Actualizar_Observaciones = new BackgroundWorker();
                obj_TareaAsincrona_Actualizar_Observaciones.DoWork += new DoWorkEventHandler(TareaAsincrona_Actualizar_Observaciones_DoWork);
                obj_TareaAsincrona_Actualizar_Observaciones.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Actualizar_Observaciones_Completed);
                obj_TareaAsincrona_Actualizar_Observaciones.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;
                }

                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_Observaciones));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA());
            }
        }

        private void TareaAsincrona_Actualizar_Observaciones_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                mdl_INTERNO_ValorDevuelto_Modelo = Actualizar_Observaciones_Final();
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_Observaciones_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_Observaciones_DoWork));

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

            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_AlbaranCabecera, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }
                }
                else
                {
                    g_bol_ModificacionDatosAfectaLineas = false;
                    g_frm_P_AlbaranCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_Observaciones_Completed));
            }
        }

        private INTERNO_ValorDevuelto_Modelo Actualizar_Observaciones_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";

            try
            {
                 mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_AlbaranesCabecera_Datos.Actualizar_Observaciones(g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.id,g_frm_P_AlbaranCabecera.Exferia_TextBox_Observaciones.Text);
                
                //Si esta Todo Correcto se Actualiza el modelo Principal
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    g_mdl_INTERNO_VTA_AlbaranesCabecera_Modelo.observaciones = g_frm_P_AlbaranCabecera.Exferia_TextBox_Observaciones.Text;
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_AlbaranCabecera_Controladora) + "/" + nameof(Actualizar_Observaciones_Final));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        #endregion

        #endregion
    }
}
