using Exferia_Aplicacion.Calculos.VentasCompras;
using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Generales;
using Exferia_Aplicacion.Modelos_Listado_Filtros;
using Exferia_Aplicacion.Visualizacion;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_General;
using Exferia_Inventarios._0_Modelos;
using Exferia_Inventarios._1_Datos;
using Exferia_Inventarios._3_Vistas.Listados;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Linq.Expressions;
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_Inventarios.General.Enumerados_Inventarios;

namespace Exferia_Inventarios._3_Vistas.Controladoras
{
    public class P_MovimientoAlmacenCabecera_Controladora
    {
        #region Variables Generales
        private P_MovimientoAlmacenCabecera g_frm_P_MovimientoAlmacenCabecera = 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 Datos Necesarias para la carga de datos
        private INV_MovimientosAlmacenCabecera_Datos g_obj_INV_MovimientosAlmacenCabecera_Datos = new INV_MovimientosAlmacenCabecera_Datos();
        private INV_MovimientosAlmacenLineas_Datos g_obj_INV_MovimientosAlmacenLineas_Datos = new INV_MovimientosAlmacenLineas_Datos();
        private INV_MovimientosAlmacenLineas_Trazabilidad_Datos g_obj_INV_MovimientosAlmacenLineas_Trazabilidad_Datos = new INV_MovimientosAlmacenLineas_Trazabilidad_Datos();

        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 antes de tocar las lineas

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

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

        //Si se estuviera Modificando el Modelo del Registro seleccionado
        public INTERNO_INV_MovimientosAlmacenCabecera_Modelo g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo = null;

        public string g_str_Estado = Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO;

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

        //Tarea Asincrona de Borrar de datos
        private BackgroundWorker g_obj_TareaAsincrona_BorrarDatos;

        //Tarea Asincrona de Grabar de datos
        public BackgroundWorker g_obj_TareaAsincrona_GrabarDatos;
        public bool g_bol_GrabarDatos_TerminoCorrectamente = true;

        //TareaAsincrona de Cambiar la fecha
        public BackgroundWorker g_obj_TareaAsincrona_Cambio_Fecha;
        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
        
        private BackgroundWorker g_obj_TareaAsincrona_Cambio_Delegacion_Origen;

        private BackgroundWorker g_obj_TareaAsincrona_Cambio_Delegacion_Destino;
        #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;

        #region MovimientoAlmacen Lineas
        //Tarea Asincrona para la Rellenar DataGridView de MovimientoAlmacenLinea
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea;

        //Tarea Asincrona para la Borrar MovimientoAlmacenLinea
        private BackgroundWorker g_TareaAsincrona_Borrar_MovimientoAlmacenLinea;

        //Tarea Asincrona para Actualizar el Total del Importe
        private BackgroundWorker g_TareaAsincrona_ActualizarTotalImporte_MovimientoAlmacenLinea;

        //Listado de MovimientoAlmacenLineas
        public List<INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo> g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo = null;

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

        //Filtrado del Listado de MovimientoAlmacenLinea
        public List<string> g_lst_ColumnasAMostrar_INV_MovimientosAlmacenLineas = new List<string>();
        public ABS_Listado g_obj_ABS_Listado_MovimientoAlmacenLinea = null;
        public Dictionary<string, object> g_dct_ListadoFiltros_INV_MovimientosAlmacenLineas = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea = 0;
        private int g_int_TotalRegistros_MovimientoAlmacenLinea = 0;
        #endregion

        #region MovimientoAlmacen Trazabilidad
        //Tarea Asincrona para la Rellenar DataGridView de MovimientoAlmacenLinea
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad;

        //Tarea Asincrona para la Borrar MovimientoAlmacenLinea
        private BackgroundWorker g_TareaAsincrona_Borrar_MovimientoAlmacenTrazabilidad;

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

        //Filtrado del Listado de MovimientoAlmacenTrazabilidad
        public List<string> g_lst_ColumnasAMostrar_INV_MovimientoAlmacensTrazabilidad = new List<string>();
        public ABS_Listado g_obj_ABS_Listado_MovimientoAlmacenTrazabilidad = null;
        #endregion

        #endregion

        #region Constructor
        public P_MovimientoAlmacenCabecera_Controladora(P_MovimientoAlmacenCabecera _frm_P_MovimientoAlmacenCabecera)
        {
            g_frm_P_MovimientoAlmacenCabecera = _frm_P_MovimientoAlmacenCabecera;

            g_obj_ABS_Listado_MovimientoAlmacenLinea = new ABS_Listado_INV_MovimientosAlmacenLineas(g_frm_P_MovimientoAlmacenCabecera.P_Base_ValoresGenerales);
            g_obj_ABS_Listado_MovimientoAlmacenTrazabilidad = new ABS_Listado_INV_MovimientosAlmacenLineas_Trazabilidad(g_frm_P_MovimientoAlmacenCabecera.P_Base_ValoresGenerales);

            //(Tarea Asincrona) Cargar Listado de Lineas ########################################
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea = new BackgroundWorker();
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea_DoWork);
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea_ProgressChanged);
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea_Completed);
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea.WorkerReportsProgress = true;
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea.WorkerSupportsCancellation = true;
            //####################################################################################

            //(Tarea Asincrona) Cargar Listado de Trazabilidades ########################################
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad = new BackgroundWorker();
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad_DoWork);
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad_ProgressChanged);
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad_Completed);
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad.WorkerReportsProgress = true;
            g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad.WorkerSupportsCancellation = true;
            //####################################################################################


            g_bol_Termino_CargaDatos_Inicial = true;
        }
        #endregion

        #region Datos Iniciales
        public void Datos_Iniciales()
        {
            try
            {
                g_frm_P_MovimientoAlmacenCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = Variables.G_DTT_FECHA_INICIAL_PORDEFECTO.ToString("dd/MM/yyyy");
                g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_FechaEmpresa(Variables.G_DTT_FECHA_INICIAL_PORDEFECTO, g_frm_P_MovimientoAlmacenCabecera.P_Base_ValoresGenerales.lng_idEmpresa);

                g_frm_P_MovimientoAlmacenCabecera.P_Base_SeModificoDatosPantalla = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "" + nameof(Datos_Iniciales));
            }
        }
        #endregion

        #region Vaciar datos
        public void VaciarDatos()
        {
            g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo = null;

            //NumeroDocumento
            g_frm_P_MovimientoAlmacenCabecera.Exferia_TextBox_NumeroDocumento.Text = "";

            g_obj_ENUM_VALIDACIONFECHAS_TIPOCIERRE = G_ENUM_VALIDACIONFECHAS_TIPOCIERRE.Ninguno;
            Mostrar_CerradoAbierto();

            //Delegacion Origen
            g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_FechaBorrado = null;
            g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Enabled = true;

            //Delegacion Destino
            g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_FechaBorrado = null;
            g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Enabled = true;

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

            //fecha
            g_frm_P_MovimientoAlmacenCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = Variables.G_DTT_FECHA_INICIAL_PORDEFECTO.ToString("dd/MM/yyyy");

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


            //MovimientoAlmacenLineas ..................................................
            g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo = new List<INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo>();
            g_frm_P_MovimientoAlmacenCabecera.Exferia_DataGridView_Lineas.Rows.Clear();
            g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea = 0;
            g_int_TotalRegistros_MovimientoAlmacenLinea = 0;
            g_frm_P_MovimientoAlmacenCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_MovimientoAlmacenLinea;
            g_frm_P_MovimientoAlmacenCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea;
            //....................................................................

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

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

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

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

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

                return g_bol_GrabarDatos_TerminoCorrectamente;
            }
            return true;
        }
        #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_MovimientoAlmacenCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture), g_frm_P_MovimientoAlmacenCabecera.P_Base_ValoresGenerales.lng_idEmpresa);
                if (mdl_GEN_EjerciciosActivos_Empresa != null)
                {
                    string str_CodigoSiguiente = Datos_Generales.Buscar_CodigoSiguiente_Numerico(nameof(INV_MovimientosAlmacenCabecera),
                                                                                                nameof(INV_MovimientosAlmacenCabecera.numeroDocumento),
                                                                                                nameof(INV_MovimientosAlmacenCabecera.idEmpresa),
                                                                                                g_frm_P_MovimientoAlmacenCabecera.P_Base_ValoresGenerales.lng_idEmpresa,
                                                                                                nameof(INV_MovimientosAlmacenCabecera.idDelegacion_Origen),
                                                                                                g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Id,
                                                                                                true,
                                                                                                g_frm_P_MovimientoAlmacenCabecera.Exferia_TextBox_NumeroDocumento.Exferia_TextBox_MaxLength,
                                                                                                nameof(INV_MovimientosAlmacenCabecera.fecha),
                                                                                                mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaInicio,
                                                                                                mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaFin
                                                                                                );

                    if (!str_CodigoSiguiente.Equals("-1"))
                    {
                        g_frm_P_MovimientoAlmacenCabecera.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_MovimientoAlmacenCabecera.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.Message, ex, nameof(P_MovimientoAlmacenCabecera_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_MovimientoAlmacenCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture), g_frm_P_MovimientoAlmacenCabecera.P_Base_ValoresGenerales.lng_idEmpresa);
                if (mdl_GEN_EjerciciosActivos_Empresa != null)
                {

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

                    bool bol_CodigoRepetido = Datos_Generales.Buscar_CodigoRepetido(nameof(INV_MovimientosAlmacenCabecera),
                                                                                    nameof(INV_MovimientosAlmacenCabecera.numeroDocumento),
                                                                                    str_Codigo,
                                                                                    nameof(INV_MovimientosAlmacenCabecera.id),
                                                                                    (g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo != null ? g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.id : -1),
                                                                                    nameof(INV_MovimientosAlmacenCabecera.idEmpresa),
                                                                                    g_frm_P_MovimientoAlmacenCabecera.P_Base_ValoresGenerales.lng_idEmpresa,
                                                                                    nameof(INV_MovimientosAlmacenCabecera.idDelegacion_Origen),
                                                                                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Id,
                                                                                    true,
                                                                                    nameof(INV_MovimientosAlmacenCabecera.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_MovimientoAlmacenCabecera.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.Message, ex, nameof(P_MovimientoAlmacenCabecera_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_MovimientoAlmacenCabecera.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_MovimientoAlmacenCabecera.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_MovimientoAlmacenCabecera_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_MovimientoAlmacenCabecera.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_INV_MovimientosAlmacenCabecera_Modelo != null)
                    {
                        //Cargar Listado MovimientoAlmacenLinea ...........................................................
                        if (g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.MovimientoAlmacenLineas != null)
                        {
                            g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.MovimientoAlmacenLineas;
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_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_MovimientoAlmacenCabecera_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_MovimientoAlmacenCabecera.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_MovimientoAlmacenCabecera.Salir_P_Base();
                }
                else
                {
                    //Si tiene Lineas Bloqueo la Delegacion (Porque las lineas tiene almacenes que depende de la delegacion)
                    if (g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null && g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count > 0)
                    {
                        g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Enabled = false;
                        g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Enabled = false;
                    }

                    //Ordenar
                    g_frm_P_MovimientoAlmacenCabecera.MovimientoAlmacenLinea_Ordenar_DataGridView();

                    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_MovimientoAlmacenCabecera,
                                                                                                        g_frm_P_MovimientoAlmacenCabecera.P_Base_ValoresGenerales.EjercicioActivo,
                                                                                                        g_frm_P_MovimientoAlmacenCabecera.P_Base_ValoresGenerales.Ejercicios_Listado.ToList(),
                                                                                                        g_frm_P_MovimientoAlmacenCabecera.Exferia_Label_SinColor_Advertencia_Ejercicio,
                                                                                                        g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha,
                                                                                                        0);

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

                g_frm_P_MovimientoAlmacenCabecera.Salir_P_Base();
            }
            finally
            {
                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();
                }

                //Hacemos foco al primer control.
                Funciones.Poner_Foco_Objeto(g_frm_P_MovimientoAlmacenCabecera, g_frm_P_MovimientoAlmacenCabecera.Exferia_FechaSeleccion_Fecha);
                //Seleccionamos el texto
                Funciones.SeleccionarTexto_Objeto(g_frm_P_MovimientoAlmacenCabecera, g_frm_P_MovimientoAlmacenCabecera.Exferia_FechaSeleccion_Fecha);
            }
        }

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

            try
            {
                g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo = g_obj_INV_MovimientosAlmacenCabecera_Datos.Obtener(_lng_id);

                //Si no es Nulo Cargo los Datos
                if (g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo != null)
                {

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

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

                    //numeroDocumento
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_TextBox_NumeroDocumento.Text = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.numeroDocumento.ToString();

                    //observaciones
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_TextBox_Observaciones.Text = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.observaciones;

                    //fecha
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha.ToString("dd/MM/yyyy");
                    g_mdl_GEN_EjerciciosActivos_Empresa_SEGUNFECHA = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_FechaEmpresa(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha, g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idEmpresa);

                    //Delegaciones origen
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.GEN_Delegaciones.id;
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.GEN_Delegaciones.codigo;
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.GEN_Delegaciones.descripcion;
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.GEN_Delegaciones.fechaBorrado;

                    //Delegaciones destino
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.GEN_Delegaciones1.id;
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.GEN_Delegaciones1.codigo;
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.GEN_Delegaciones1.descripcion;
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.GEN_Delegaciones1.fechaBorrado;

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

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

                        dynamic dnm_Objeto = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_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_INV_MovimientosAlmacenCabecera_Modelo.numeroDocumento)))
                            {
                                str_MenuSuperior_Codigo = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.numeroDocumento.ToString();
                            }
                        }
                        if (str_ValorAMostrarFinal != "")
                        {
                            g_frm_P_MovimientoAlmacenCabecera.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_MovimientoAlmacenCabecera.Tag.ToString(), str_MenuSuperior_Codigo);

                    g_frm_P_MovimientoAlmacenCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Control_Errores)
            {
                bol_ValorDevuelto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_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_MovimientoAlmacenCabecera.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_MovimientoAlmacenCabecera.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_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_MovimientoAlmacenCabecera_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_MovimientoAlmacenCabecera_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_MovimientoAlmacenCabecera.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_MovimientoAlmacenCabecera,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
                {
                    // Devolver al Listado el Row Añadido/Modificado
                    if (g_frm_P_MovimientoAlmacenCabecera.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_MovimientoAlmacenCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }
                    else if (g_frm_P_MovimientoAlmacenCabecera.P_Base_F3Origen != null)
                    {
                        g_frm_P_MovimientoAlmacenCabecera.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_MovimientoAlmacenCabecera, g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo);
                    g_bol_ModificacionDatosAfectaLineas = false;
                    g_frm_P_MovimientoAlmacenCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_Completed));
            }
        }

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

            try
            {
                // La Delegacion origen no puede estar Vacio (Obligatorio)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Delegacion origen validar que es Correcto
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // La Delegacion destino no puede estar Vacio (Obligatorio)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Delegacion destino validar que es Correcto
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

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

                    if (int_fechaAlta_Respuesta == 1)//Vacia
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_MovimientoAlmacenCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_MovimientoAlmacenCabecera.Exferia_FechaSeleccion_Fecha;
                    }
                    else if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_MovimientoAlmacenCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_MovimientoAlmacenCabecera.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_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    if (g_frm_P_MovimientoAlmacenCabecera.Exferia_TextBox_NumeroDocumento.Text.Trim().Length == 0)
                    {
                        INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = Buscar_CodigoSiguiente();

                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto == false)
                        {
                            mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_ValorDevuelto_Modelo.Mensaje = mdl_INTERNO_ValorDevuelto_Modelo.Mensaje;
                            mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_MovimientoAlmacenCabecera.Exferia_TextBox_NumeroDocumento;
                        }
                    }
                }

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

                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto == false)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = mdl_INTERNO_ValorDevuelto_Modelo.Mensaje;
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_MovimientoAlmacenCabecera.Exferia_TextBox_NumeroDocumento;
                    }
                }

                // Si hay Empleado validar que es Correcto
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Empleado.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }
            }
            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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(ValidarDatos));

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

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

            //Iniciar transaccion
            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    INV_MovimientosAlmacenCabecera mdl_INV_MovimientosAlmacenCabecera = new INV_MovimientosAlmacenCabecera();
                    mdl_INV_MovimientosAlmacenCabecera.id = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo != null ? g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.id : -1;

                    //Asignar el idEmpresa...........................................................................................
                    if ((g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo != null ? g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idEmpresa : -1) != -1)
                    {
                        mdl_INV_MovimientosAlmacenCabecera.idEmpresa = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idEmpresa;
                    }
                    else
                    {
                        //Buscar el idEmpresa que Corresponda
                        mdl_INV_MovimientosAlmacenCabecera.idEmpresa = Datos_Generales.GEN_Empresas_Devolver_IdEmpresa_AGrabar(g_frm_P_MovimientoAlmacenCabecera.P_Base_ValoresGenerales.lng_idEmpresa, nameof(INV_MovimientosAlmacenCabecera));
                    }

                    //NumeroDocumento ............................................................
                    mdl_INV_MovimientosAlmacenCabecera.numeroDocumento = long.Parse(g_frm_P_MovimientoAlmacenCabecera.Exferia_TextBox_NumeroDocumento.Text);

                    // observaciones
                    mdl_INV_MovimientosAlmacenCabecera.observaciones= g_frm_P_MovimientoAlmacenCabecera.Exferia_TextBox_Observaciones.Text.Trim();

                    // fecha
                    mdl_INV_MovimientosAlmacenCabecera.fecha = DateTime.ParseExact(g_frm_P_MovimientoAlmacenCabecera.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                    // idDelegacion_Origen
                    mdl_INV_MovimientosAlmacenCabecera.idDelegacion_Origen = g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Id;

                    // idDelegacion_Destino
                    mdl_INV_MovimientosAlmacenCabecera.idDelegacion_Destino = g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Id;

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

                    //Estado
                    mdl_INV_MovimientosAlmacenCabecera.estado = g_str_Estado;

                    // Se graba el modelo ya relleno.
                    mdl_ValorDevuelto_Modelo = g_obj_INV_MovimientosAlmacenCabecera_Datos.Grabar(mdl_INV_MovimientosAlmacenCabecera);

                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        // obtenemos la id del MovimientoAlmacensCabecera
                        long lng_idMovimientoAlmacenCabecera = mdl_ValorDevuelto_Modelo.Id;


                        //Termino Transaccion
                        transaccion_SQL.Complete();
                    }

                    transaccion_SQL.Dispose();

                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        //Obtener el modelo que se acaba de grabar
                        g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo = g_obj_INV_MovimientosAlmacenCabecera_Datos.Obtener(mdl_ValorDevuelto_Modelo.Id);

                        g_frm_P_MovimientoAlmacenCabecera.P_Base_id = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.id;

                        //Recargar
                        g_frm_P_MovimientoAlmacenCabecera.Exferia_TextBox_NumeroDocumento.Text = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.numeroDocumento.ToString();

                        //Si tienes Permisos para Borrar
                        g_frm_P_MovimientoAlmacenCabecera.Exferia_Button_Borrar.Enabled = true;
                    }
                }
                catch (Control_Errores)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
                    transaccion_SQL.Dispose();
                }
                catch (Exception ex)
                {
                    Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(GrabarDatos_Final));
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
                    transaccion_SQL.Dispose();
                }
            }

            return mdl_ValorDevuelto_Modelo;
        }

        #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_MovimientoAlmacenCabecera.Enabled = false;
                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_BORRANDODATOS());


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

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

                g_frm_P_MovimientoAlmacenCabecera.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_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_MovimientoAlmacenCabecera_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_MovimientoAlmacenLinea_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_MovimientoAlmacenCabecera.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_MovimientoAlmacenCabecera.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_MovimientoAlmacenCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }
                    else if (g_frm_P_MovimientoAlmacenCabecera.P_Base_F3Origen != null)
                    {
                        g_frm_P_MovimientoAlmacenCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }

                    g_frm_P_MovimientoAlmacenCabecera.P_Base_SeModificoDatosPantalla = false;
                    g_frm_P_MovimientoAlmacenCabecera.Salir_P_Base();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_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_INV_MovimientosAlmacenCabecera_Datos.Borrar(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo != null ? g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_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_MovimientoAlmacenCabecera_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 MovimientoAlmacens Lineas 

        #region Rellenar DataGrid MovimientoAlmacenLinea
        public void Rellenar_DataGrid_MovimientoAlmacenLinea()
        {
            try
            {
                g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea.CancelAsync();
                while (g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea.IsBusy)
                {
                    Application.DoEvents();
                }

                //Vaciar el Listado
                g_frm_P_MovimientoAlmacenCabecera.Exferia_DataGridView_Lineas.Rows.Clear();
                g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea = 0;
                g_int_TotalRegistros_MovimientoAlmacenLinea = 0;
                g_frm_P_MovimientoAlmacenCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_MovimientoAlmacenLinea;
                g_frm_P_MovimientoAlmacenCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea;
                g_frm_P_MovimientoAlmacenCabecera.Exferia_Label_SinColor_TotalImporte_Valor.Text = "0,00";

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea.RunWorkerAsync();
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("",ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Rellenar_DataGrid_MovimientoAlmacenLinea));
            }
        }

        private void TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                List<INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo> lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo_Filtradas = Filtrar_MovimientoAlmacenLinea();

                //Total
                g_int_TotalRegistros_MovimientoAlmacenLinea = lst_INTERNO_INV_MovimientosAlmacenLineas_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_MovimientoAlmacenLineas_Columnas.Where(m => m.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT)).ToList())
                {
                    int int_HayTextos= lst_INTERNO_INV_MovimientosAlmacenLineas_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_MovimientoAlmacenLinea.LISTADO_COLUMNAS().Where(m => m.Key.Equals(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna)).FirstOrDefault().Value.TipoDato = G_ENUM_TIPOSDATOS.TEXT;
                    }
                }

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

                    //Progreso
                    g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea += 1;

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

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

                //Barra de Progreso
                g_frm_P_MovimientoAlmacenCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_MovimientoAlmacenLinea;
                g_frm_P_MovimientoAlmacenCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea;

            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenLinea_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!e.Cancelled)
            {
                g_frm_P_MovimientoAlmacenCabecera.MovimientoAlmacenLinea_Ordenar_DataGridView();
            }
        }

        public DataGridViewRow Transformar_Modelo_A_Row_MovimientoAlmacenLinea(INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo _mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_MovimientoAlmacenCabecera.Exferia_DataGridView_Lineas.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_MovimientoAlmacenCabecera.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_MovimientoAlmacenLineas_Columnas)
            {
                //Segun el Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                {
                    DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo, null);
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        public List<INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo> Filtrar_MovimientoAlmacenLinea()
        {
            //Filtros Avanzados
            if (g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null)
            {
                if (g_dct_ListadoFiltros_INV_MovimientosAlmacenLineas != null && g_dct_ListadoFiltros_INV_MovimientosAlmacenLineas.Count > 0)
                {
                    return g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.AsQueryable().Where(Funciones_Lambda.Formar_EmpresionLambda_Filtrado<INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo>(g_dct_ListadoFiltros_INV_MovimientosAlmacenLineas, g_obj_ABS_Listado_MovimientoAlmacenLinea)).ToList();
                }
                else
                {

                    return g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.AsQueryable().ToList();
                }
            }
            else
            {
                return null;
            }
        }
        #endregion

        public void MovimientoAlmacenLinea_Actualizar_Registro(long _lng_idMovimientoAlmacenLinea, G_ENUM_TIPOACCION _enum_TipoAccion,bool _bol_RecargarTrazabilidad)
        {
            try
            {
                //Buscar el Registro en Base de datos
                INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo = g_obj_INV_MovimientosAlmacenLineas_Datos.Obtener_MovimientoAlmacenLinea(_lng_idMovimientoAlmacenLinea);

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

                        g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Add(mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo);
                    }

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

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

                        //Sumar Cantidad de Lineas Insertadas
                        g_int_TotalRegistros_MovimientoAlmacenLinea += 1;
                        g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea += 1;

                        g_frm_P_MovimientoAlmacenCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_MovimientoAlmacenLinea;
                        g_frm_P_MovimientoAlmacenCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea;
                    }

                    //Actualiazr el listado de las lineas, para poder cogerlas desde la pantalla de MovimientoAlmacenLinea
                    if (g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null &&
                        g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count > 0)
                    {
                        g_frm_P_MovimientoAlmacenCabecera.P_Base_Objetos_Listado = g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Select(m => new INTERNO_Listado_CamposClave_Modelo
                        {
                            ID = m.id,
                            ID_Aux1 = m.idArticulo,
                            Dato_Auxiliar = (m.Articulo_Codigo + " - " + m.Articulo_Descripcion)
                        }).ToList();
                    }
                    else
                    {
                        g_frm_P_MovimientoAlmacenCabecera.P_Base_Objetos_Listado = null;
                    }

                    if (_bol_RecargarTrazabilidad)
                    {
                        Rellenar_DataGrid_MovimientoAlmacenTrazabilidad(_lng_idMovimientoAlmacenLinea);
                    }
                }

                //Si tiene Lineas Bloqueo la Delegacion (Porque las lineas tiene almacenes que depende de la delegacion)
                if (g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null && g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count > 0)
                {
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Enabled = false;
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Enabled = false;
                }
                else
                {
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Enabled = true;
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Enabled = true;
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(MovimientoAlmacenLinea_Actualizar_Registro));
            }

        }
        public void MovimientoAlmacenLinea_Borrar_Registro(List<long> _lst_idMovimientoAlmacenLinea)
        {
            try
            {
                //Borrar primero el List<> General ################################################################################
                if (g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null && g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count > 0)
                {
                    List<INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo> lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo_BUSQUEDA = g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Where(m => _lst_idMovimientoAlmacenLinea.Contains(m.id)).ToList();
                    if (lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo_BUSQUEDA != null && lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo_BUSQUEDA.Count > 0)
                    {
                        foreach (INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo in lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo_BUSQUEDA)
                        {
                            g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Remove(mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo);
                        }
                    }
                }

                //Borrar del DataGridView
                List<DataGridViewRow> lst_DataGridViewRow = g_frm_P_MovimientoAlmacenCabecera.Exferia_DataGridView_Lineas.Rows
                                .Cast<DataGridViewRow>()
                                .Where(r => _lst_idMovimientoAlmacenLinea.Contains(long.Parse(r.Cells[nameof(INTERNO_INV_MovimientosAlmacenLineas_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_MovimientoAlmacenCabecera.Exferia_DataGridView_Lineas.Rows.Remove(dgvr_Borrar);
                    }
                }

                //Restar Cantidad de Lineas Borradas
                g_int_TotalRegistros_MovimientoAlmacenLinea -= _lst_idMovimientoAlmacenLinea.Count();
                g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea = g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea - _lst_idMovimientoAlmacenLinea.Count();

                g_frm_P_MovimientoAlmacenCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Total = g_int_TotalRegistros_MovimientoAlmacenLinea;
                g_frm_P_MovimientoAlmacenCabecera.Exferia_BarraProgreso_Lineas.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_MovimientoAlmacenLinea;

                //Actualiazr el listado de las lineas, para poder cogerlas desde la pantalla de MovimientoAlmacenLinea
                if (g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null &&
                    g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count > 0)
                {
                    g_frm_P_MovimientoAlmacenCabecera.P_Base_Objetos_Listado = g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Select(m => new INTERNO_Listado_CamposClave_Modelo
                    {
                        ID = m.id,
                        ID_Aux1 = m.idArticulo,
                        Dato_Auxiliar = (m.Articulo_Codigo + " - " + m.Articulo_Descripcion)
                    }).ToList();
                }
                else
                {
                    g_frm_P_MovimientoAlmacenCabecera.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_INV_MovimientosAlmacenLineas_Listado_Modelo != null && g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count > 0)
                {
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Enabled = false;
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Enabled = false;
                }
                else
                {
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Enabled = true;
                    g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Enabled = true;
                }

                g_frm_P_MovimientoAlmacenCabecera.P_Base_SeModificoDatosPantalla = false;
            }
            catch (Control_Errores)
            {}
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(MovimientoAlmacenLinea_Borrar_Registro));
            }
        }

        #region Borrar Datos en Base Datos MovimientoAlmacenLinea
        public void BorrarDatos_MovimientoAlmacenLinea(List<long> _lst_idMovimientoAlmacenLinea_ABorrar)
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_MovimientoAlmacenCabecera.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_idMovimientoAlmacenLinea_ABorrar);

                    g_TareaAsincrona_Borrar_MovimientoAlmacenLinea = new BackgroundWorker();
                    g_TareaAsincrona_Borrar_MovimientoAlmacenLinea.DoWork += new DoWorkEventHandler(TareaAsincrona_Borrar_MovimientoAlmacenLinea_DoWork);
                    g_TareaAsincrona_Borrar_MovimientoAlmacenLinea.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Borrar_MovimientoAlmacenLinea_Completed);
                    g_TareaAsincrona_Borrar_MovimientoAlmacenLinea.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_MovimientoAlmacenCabecera.Enabled = true;

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

        private void TareaAsincrona_Borrar_MovimientoAlmacenLinea_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_idMovimientoAlmacenLinea_ABorrar = (List<long>)lst_Argumentos[0];

                    // Borrar 
                    mdl_ValorDevuelto_Modelo = BorrarDatos_Final_MovimientoAlmacenLinea(lst_idMovimientoAlmacenLinea_ABorrar);

                    //Si esta todo Correcto cierro transaccion
                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        mdl_ValorDevuelto_Modelo.Listado_Id = lst_idMovimientoAlmacenLinea_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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_MovimientoAlmacenLinea_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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_MovimientoAlmacenLinea_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_MovimientoAlmacenLinea_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_MovimientoAlmacenCabecera.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_INV_MOVIMIENTOSALMACENLINEAS);
                    lst_obj.Add(mdl_ValorDevuelto_Modelo_Resultado.Listado_Id);

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

                    g_frm_P_MovimientoAlmacenCabecera.P_Base_ActualizarRegistro_ConObjeto(lst_obj, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);

                    g_frm_P_MovimientoAlmacenCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_MovimientoAlmacenLinea_Completed));
            }
            finally
            {
                //Poner el Foco Inicial
                Funciones.Poner_Foco_Objeto(g_frm_P_MovimientoAlmacenCabecera, g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo);
            }
        }

        private INTERNO_ValorDevuelto_Modelo BorrarDatos_Final_MovimientoAlmacenLinea(List<long> _lst_idMovimientoAlmacenLinea_ABorrar)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            try
            {
                if (_lst_idMovimientoAlmacenLinea_ABorrar != null && _lst_idMovimientoAlmacenLinea_ABorrar.Count > 0)
                {
                    foreach (long idMovimientoAlmacenLinea_ABorrar in _lst_idMovimientoAlmacenLinea_ABorrar)
                    {
                        INTERNO_INV_MovimientosAlmacenLineas_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo = g_obj_INV_MovimientosAlmacenLineas_Datos.Obtener_Para_Borrar(idMovimientoAlmacenLinea_ABorrar);

                        if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo != null)
                        {
                            #region ACTUALIZAR ARTICULO MOVIMIENTOS DIARIO 

                            #region ORIGEN
                            #region Rellenar modelo
                            INTERNO_ArticuloDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN = new INTERNO_ArticuloDiarioActualizar_Documentos_Modelo();

                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_DESCARGAS.Codigo;

                            //Datos Actuales
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticulo_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Fecha_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdDelegacion_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdAlmacen_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdUbicacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_Actual = 0;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_SegundaUnidad_Actual = 0;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.TipoCompraVentaOpcion_Actual = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Relacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Operacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;

                            //Datos Anteriores
                            if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo != null)
                            {
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Modificacion = true;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticuloComodin_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticulo_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Fecha_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdDelegacion_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Origen;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdAlmacen_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Origen;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdUbicacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Origen;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.TipoCompraVentaOpcion_Anterior = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.cantidad;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.segundaUnidad_cantidad;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Relacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Operacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;
                            }
                            else
                            {
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Modificacion = false;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticuloComodin_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticulo_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Fecha_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdDelegacion_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdAlmacen_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.IdUbicacion_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.TipoCompraVentaOpcion_Anterior = "";
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_SegundaUnidad_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Relacion_Anterior = null;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN.Operacion_Anterior = "";
                            }
                            #endregion
                            mdl_INTERNO_ValorDevuelto_Modelo = Funciones_ArticuloMovimientosDiario.Actualizar_ArticuloMovimientoDiario(mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_ORIGEN);
                            #endregion

                            #region DESTINO
                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                #region Rellenar modelo
                                INTERNO_ArticuloDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO = new INTERNO_ArticuloDiarioActualizar_Documentos_Modelo();

                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_CARGAS.Codigo;

                                //Datos Actuales
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdArticulo_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Fecha_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdDelegacion_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Destino;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdAlmacen_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Destino;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdUbicacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Destino;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_Actual = 0;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_SegundaUnidad_Actual = 0;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.TipoCompraVentaOpcion_Actual = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Relacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                                mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Operacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;

                                //Datos Anteriores
                                if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo != null)
                                {
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Modificacion = true;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdArticuloComodin_Anterior = null;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdArticulo_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Fecha_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdDelegacion_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Destino;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdAlmacen_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Destino;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdUbicacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Destino;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.TipoCompraVentaOpcion_Anterior = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.cantidad;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.segundaUnidad_cantidad;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Relacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Operacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;
                                }
                                else
                                {
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Modificacion = false;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdArticuloComodin_Anterior = null;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdArticulo_Anterior = null;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Fecha_Anterior = null;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdDelegacion_Anterior = null;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdAlmacen_Anterior = null;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdUbicacion_Anterior = null;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.TipoCompraVentaOpcion_Anterior = "";
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_Anterior = null;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_SegundaUnidad_Anterior = null;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Relacion_Anterior = null;
                                    mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Operacion_Anterior = "";
                                }
                                #endregion
                                mdl_INTERNO_ValorDevuelto_Modelo = Funciones_ArticuloMovimientosDiario.Actualizar_ArticuloMovimientoDiario(mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO);
                            }
                            #endregion
                            #endregion

                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                #region ACTUALIZAR ARTICULO TRAZABILIDAD MOVIMIENTOS DIARIO 
                                //Buscar la Linea
                                INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo = g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Where(m => m.id.Equals(idMovimientoAlmacenLinea_ABorrar)).FirstOrDefault();

                                if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null &&
                                    mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX != null &&
                                    mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX.Count > 0)
                                {
                                    foreach (INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo in mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX)
                                    {
                                        #region ORIGEN
                                        #region Rellenar modelo
                                        INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN = new INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo();

                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_DESCARGAS.Codigo;

                                        //Datos Actuales
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticulo_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticulotrazabilidad_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Fecha_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdDelegacion_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Origen;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdAlmacen_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Origen;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdUbicacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Origen;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_Actual = 0;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_SegundaUnidad_Actual = 0;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.TipoCompraVentaOpcion_Actual = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Relacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Operacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;

                                        //Datos Anteriores
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Modificacion = true;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticulo_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticulotrazabilidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Fecha_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdDelegacion_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Origen;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdAlmacen_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Origen;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdUbicacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Origen;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.TipoCompraVentaOpcion_Anterior = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.cantidad;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.segundaUnidad_cantidad;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Relacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                                        mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Operacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;

                                        #endregion
                                        mdl_INTERNO_ValorDevuelto_Modelo = Funciones_ArticuloTrazabilidadMovimientosDiario.Actualizar_ArticuloTrazabilidadMovimientoDiario(mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN);
                                        #endregion

                                        #region DESTINO
                                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                                        {
                                            #region Rellenar modelo
                                            INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO = new INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo();

                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_CARGAS.Codigo;

                                            //Datos Actuales
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.IdArticulo_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.IdArticulotrazabilidad_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.Fecha_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.IdDelegacion_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Destino;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.IdAlmacen_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Destino;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.IdUbicacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Destino;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_Actual = 0;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_SegundaUnidad_Actual = 0;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.TipoCompraVentaOpcion_Actual = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.Relacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.Operacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;

                                            //Datos Anteriores
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.Modificacion = true;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.IdArticulo_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.IdArticulotrazabilidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.idArticulo_Trazabilidad;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.Fecha_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.IdDelegacion_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Destino;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.IdAlmacen_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Destino;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.IdUbicacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Destino;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.TipoCompraVentaOpcion_Anterior = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.cantidad;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.segundaUnidad_cantidad;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.Relacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_DESTINO.Operacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;

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

                                }
                                #endregion

                                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                                {
                                    mdl_INTERNO_ValorDevuelto_Modelo = g_obj_INV_MovimientosAlmacenLineas_Datos.Borrar(_lst_idMovimientoAlmacenLinea_ABorrar);
                                }
                            }
                        }
                    }
                }
            }
            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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(BorrarDatos_Final_MovimientoAlmacenLinea));
                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_MovimientoAlmacenLinea(long _lng_idIMovimientoAlmacenLinea_Modificada, int _int_NumeroLinea_Modificado)
        {
            try
            {
                //Se usa el dictionary para actualizar los registros en base de datos
                Dictionary<long, int> dct_IdMovimientoAlmacenLinea_NumeroLinea = new Dictionary<long, int>();

                //Ver si hay alguna linea ya creada
                if (g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null && g_lst_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Listado_Modelo.Where(m => (!m.id.Equals(_lng_idIMovimientoAlmacenLinea_Modificada)) && m.numeroLinea >= _int_NumeroLinea_Modificado).ToList().ForEach(x => x.numeroLinea += 1);

                    //Reordenar los registros
                    int int_NumeroLinea = _int_NumeroLinea_Modificado;
                    //El listado no se cogen los registros que esten en promocion
                    foreach (INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo in g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Where(x => x.numeroLinea >= _int_NumeroLinea_Modificado).OrderBy(m => m.numeroLinea))
                    {
                        //Linea Principal
                        mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.numeroLinea = int_NumeroLinea;
                        //Actualizar el DataGridView
                        DataGridViewRow row = g_frm_P_MovimientoAlmacenCabecera.Exferia_DataGridView_Lineas.Rows
                                     .Cast<DataGridViewRow>()
                                     .Where(r => r.Cells[nameof(INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.id)].Value.Equals(mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.id)).FirstOrDefault();

                        if (row != null)
                        {
                            //Actualizar el Grid
                            Transformar_Modelo_A_Row_MovimientoAlmacenLinea(mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo, row);
                        }
                        //Rellenar el Diccionario
                        dct_IdMovimientoAlmacenLinea_NumeroLinea.Add(mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.id, int_NumeroLinea);
                        int_NumeroLinea += 1;
                    }


                    //Actualizar base de datos
                    if (dct_IdMovimientoAlmacenLinea_NumeroLinea.Count > 0)
                    {
                        g_obj_INV_MovimientosAlmacenLineas_Datos.Actualizar_NumeroLinea(dct_IdMovimientoAlmacenLinea_NumeroLinea);
                    }


                    //Ordenar el DataGridView MovimientoAlmacen
                    g_frm_P_MovimientoAlmacenCabecera.MovimientoAlmacenLinea_Ordenar_DataGridView();

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

        #endregion

        #region MovimientoAlmacen Lineas Trazabilidad

        #region Rellenar DataGrid MovimientoAlmacenTrazabilidad
        public void Rellenar_DataGrid_MovimientoAlmacenTrazabilidad(long _lng_idMovimientoAlmacenLinea)
        {
            try
            {
                g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad.CancelAsync();
                while (g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad.IsBusy)
                {
                    Application.DoEvents();
                }

                //Vaciar el Listado
                g_frm_P_MovimientoAlmacenCabecera.Exferia_DataGridView_LineasTrazabilidad.Rows.Clear();

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad.RunWorkerAsync(_lng_idMovimientoAlmacenLinea);
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Rellenar_DataGrid_MovimientoAlmacenTrazabilidad));
            }
        }

        private void TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad_DoWork(object sender, DoWorkEventArgs e)
        {
            long lng_idMovimientoAlmacenLinea = -1;

            try
            {
                lng_idMovimientoAlmacenLinea = (long)e.Argument;

                //Listado de MovimientoAlmacen
                if (g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null &&
                    g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count > 0)
                {
                    //Buscar la Linea
                    INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo = g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Where(m => m.id.Equals(lng_idMovimientoAlmacenLinea)).FirstOrDefault();

                    if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null &&
                        mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX != null)
                    {

                        //Obtener las lineas de Trazabilidad
                        List<INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo> lst_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX.Where(m=>m.idMovimientoAlmacenLinea.Equals(lng_idMovimientoAlmacenLinea)).ToList();

                        if (lst_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo != null && lst_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.Count > 0)
                        {
                            foreach (INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo in lst_INTERNO_INV_MovimientosAlmacenLineas_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_MovimientoAlmacenTrazabilidad(mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo, null));

                                //Esperar un poco
                                Thread.Sleep(1);
                            }
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("",ex,nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad_DoWork));
            }
            catch (Control_Errores)
            {}
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad_DoWork));
            }
            finally
            {
                e.Result = lng_idMovimientoAlmacenLinea;
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Añadir Linea al DataGrid de MovimientoAlmacenLinea
                g_frm_P_MovimientoAlmacenCabecera.Exferia_DataGridView_LineasTrazabilidad.Rows.Add((DataGridViewRow)e.UserState);
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!e.Cancelled)
            {
                g_frm_P_MovimientoAlmacenCabecera.MovimientoAlmacenTrazabilidad_Ordenar_DataGridView();

                try
                {
                    MostrarOcultar_Resumen_Totales_Trazabilidad((long)e.Result);
                }
                catch (Exception ex)
                {
                    Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_MovimientoAlmacenTrazabilidad_Completed));
                }
            }
        }

        public DataGridViewRow Transformar_Modelo_A_Row_MovimientoAlmacenTrazabilidad(INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo _mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_MovimientoAlmacenCabecera.Exferia_DataGridView_LineasTrazabilidad.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_MovimientoAlmacenCabecera.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_MovimientoAlmacenTrazabilidad_Columnas)
            {
                //Segun el Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                {
                    DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo, null);
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        #endregion

        #region Borrar Datos en Base de Datos MovimientoAlmacenTrazabilidad
        public void BorrarDatos_MovimientoAlmacenTrazabilidad(List<long> _lst_idMovimientoAlmacenTrazabilidad_ABorrar)
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_MovimientoAlmacenCabecera.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_idMovimientoAlmacenTrazabilidad_ABorrar);

                    g_TareaAsincrona_Borrar_MovimientoAlmacenTrazabilidad = new BackgroundWorker();
                    g_TareaAsincrona_Borrar_MovimientoAlmacenTrazabilidad.DoWork += new DoWorkEventHandler(TareaAsincrona_Borrar_MovimientoAlmacenTrazabilidad_DoWork);
                    g_TareaAsincrona_Borrar_MovimientoAlmacenTrazabilidad.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Borrar_MovimientoAlmacenTrazabilidad_Completed);
                    g_TareaAsincrona_Borrar_MovimientoAlmacenTrazabilidad.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_MovimientoAlmacenCabecera.Enabled = true;

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

        private void TareaAsincrona_Borrar_MovimientoAlmacenTrazabilidad_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_idMovimientoAlmacenTrazabilidad_ABorrar = (List<long>)lst_Argumentos[0];

                    // Borrar 
                    mdl_ValorDevuelto_Modelo = BorrarDatos_Final_MovimientoAlmacenTrazabilidad(lst_idMovimientoAlmacenTrazabilidad_ABorrar);

                    //Si esta todo Correcto cierro transaccion
                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        mdl_ValorDevuelto_Modelo.Listado_Id = lst_idMovimientoAlmacenTrazabilidad_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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_MovimientoAlmacenTrazabilidad_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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_MovimientoAlmacenTrazabilidad_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_MovimientoAlmacenTrazabilidad_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_MovimientoAlmacenCabecera.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_INV_MOVIMIENTOSALMACENLINEASTRAZABILIDAD);

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

                    g_frm_P_MovimientoAlmacenCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Borrar_MovimientoAlmacenTrazabilidad_Completed));
            }
            finally
            {
                //Poner el Foco Inicial
                Funciones.Poner_Foco_Objeto(g_frm_P_MovimientoAlmacenCabecera, g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo);
            }
        }

        private INTERNO_ValorDevuelto_Modelo BorrarDatos_Final_MovimientoAlmacenTrazabilidad(List<long> _lst_idMovimientoAlmacenTrazabilidad_ABorrar)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            try
            {
                if (_lst_idMovimientoAlmacenTrazabilidad_ABorrar != null && _lst_idMovimientoAlmacenTrazabilidad_ABorrar.Count > 0)
                {
                    foreach (long lng_idMovimientoAlmacenTrazabilidad_ABorrar in _lst_idMovimientoAlmacenTrazabilidad_ABorrar)
                    {
                        INV_MovimientosAlmacenLineas_Trazabilidad mdl_INV_MovimientosAlmacenLineas_Trazabilidad = g_obj_INV_MovimientosAlmacenLineas_Trazabilidad_Datos.Obtener_Modelo_Por_Id(lng_idMovimientoAlmacenTrazabilidad_ABorrar);

                        if (mdl_INV_MovimientosAlmacenLineas_Trazabilidad != null)
                        {
                            #region ACTUALIZAR ARTICULO TRAZABILIDAD MOVIMIENTOS DIARIO 
                            INTERNO_INV_MovimientosAlmacenLineas_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo = g_obj_INV_MovimientosAlmacenLineas_Datos.Obtener_Para_Borrar(mdl_INV_MovimientosAlmacenLineas_Trazabilidad.idMovimientoAlmacenLinea);

                            #region ORIGEN
                            #region Rellenar modelo
                            INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN = new INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo();

                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_DESCARGAS.Codigo;

                            //Datos Actuales
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticulo_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticulotrazabilidad_Actual = mdl_INV_MovimientosAlmacenLineas_Trazabilidad.idArticulo_Trazabilidad;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Fecha_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdDelegacion_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Origen;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdAlmacen_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Origen;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdUbicacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Origen;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_Actual = 0;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_SegundaUnidad_Actual = 0;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.TipoCompraVentaOpcion_Actual = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Relacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Operacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;

                            //Datos Anteriores
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Modificacion = true;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticulo_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdArticulotrazabilidad_Anterior = mdl_INV_MovimientosAlmacenLineas_Trazabilidad.idArticulo_Trazabilidad;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Fecha_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdDelegacion_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Origen;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdAlmacen_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Origen;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.IdUbicacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Origen;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.TipoCompraVentaOpcion_Anterior = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_Anterior = mdl_INV_MovimientosAlmacenLineas_Trazabilidad.cantidad;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Cantidad_SegundaUnidad_Anterior = mdl_INV_MovimientosAlmacenLineas_Trazabilidad.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Relacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                            mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN.Operacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;
                            #endregion
                            mdl_INTERNO_ValorDevuelto_Modelo = Funciones_ArticuloTrazabilidadMovimientosDiario.Actualizar_ArticuloTrazabilidadMovimientoDiario(mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo_ORIGEN);
                            #endregion

                            #region DESTINO
                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                #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_CARGAS.Codigo;

                                //Datos Actuales
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Actual = mdl_INV_MovimientosAlmacenLineas_Trazabilidad.idArticulo_Trazabilidad;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Destino;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Destino;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Destino;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Actual = 0;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = 0;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;

                                //Datos Anteriores
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Modificacion = true;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idArticulo;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdArticulotrazabilidad_Anterior = mdl_INV_MovimientosAlmacenLineas_Trazabilidad.idArticulo_Trazabilidad;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Destino;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idAlmacen_Destino;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.idUbicacion_Destino;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INV_MovimientosAlmacenLineas_Trazabilidad.cantidad;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INV_MovimientosAlmacenLineas_Trazabilidad.segundaUnidad_cantidad;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.relacion;
                                mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo.operacion;
                                #endregion
                                mdl_INTERNO_ValorDevuelto_Modelo = Funciones_ArticuloTrazabilidadMovimientosDiario.Actualizar_ArticuloTrazabilidadMovimientoDiario(mdl_INTERNO_ArticuloTrazabilidadDiarioActualizar_Documentos_Modelo);
                            }
                            #endregion

                            #endregion

                        }

                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo = g_obj_INV_MovimientosAlmacenLineas_Trazabilidad_Datos.Borrar(lng_idMovimientoAlmacenTrazabilidad_ABorrar);
                        }
                    }
                }

            }
            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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(BorrarDatos_Final_MovimientoAlmacenTrazabilidad));
                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_idLineaMovimientoAlmacen)
        {
            try
            {
                INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo = null;
                if (g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null &&
                    g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count>0)
                {
                    mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo=g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Where(m => m.id.Equals(_lng_idLineaMovimientoAlmacen)).FirstOrDefault();
                }

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

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

                g_frm_P_MovimientoAlmacenCabecera.Exferia_DataGridView_LineasTrazabilidad.Size = new Size(g_frm_P_MovimientoAlmacenCabecera.Exferia_DataGridView_LineasTrazabilidad.Size.Width, (g_frm_P_MovimientoAlmacenCabecera.Panel_TrazabilidadResumenTotales_Principal.Location.Y - g_frm_P_MovimientoAlmacenCabecera.Exferia_DataGridView_LineasTrazabilidad.Location.Y) - 3);

                //Rellenar el Resumen de los Totales de la Trazabilidad
                Rellenar_Resumen_Totales_Trazabilidad(mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "" + nameof(MostrarOcultar_Resumen_Totales_Trazabilidad));
            }
        }
        private void Rellenar_Resumen_Totales_Trazabilidad(INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo _mdl_INTERNO_INV_MovimientosAlmacenLineas_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_INV_MovimientosAlmacenLineas_Listado_Modelo != null)
                {
                    //Lineas de Trazabilidad ...................................................................
                    List<INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo> lst_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo = null;
                    if (_mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null &&
                         _mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX != null)
                    {
                        //Obtener las lineas de Trazabilidad
                        lst_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo = _mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX.Where(m => m.idMovimientoAlmacenLinea.Equals(_mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.id)).ToList();
                    }
                    //............................................................................................

                    //Tipos de Embalajes
                    str_TipoEmbalaje_Principal = _mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Embalaje;

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

                    //Relacionado
                    if (g_frm_P_MovimientoAlmacenCabecera.Panel_TrazabilidadResumenTotales_Relacional.Visible)
                    {
                        str_TipoEmbalaje_Relacionado = _mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.EmbalajeRelacional;
                    }
                    
                    dcm_Total_Diferencia_Relacionado = dcm_Total_Movimiento_Relacionado - dcm_Total_Trazado_Relacionado;
                }

                //Rellenar Etiquetas
                g_frm_P_MovimientoAlmacenCabecera.Exferia_Label_Total_TrazabilidadResumenTotales_TipoEmbalaje_Principal.Text = str_TipoEmbalaje_Principal;
                g_frm_P_MovimientoAlmacenCabecera.Exferia_Label_Total_TrazabilidadResumenTotales_Movimiento_Principal.Text = string.Format("{0:0.000}", Funciones.RedondearDecimal(dcm_Total_Movimiento_Principal, 3));
                g_frm_P_MovimientoAlmacenCabecera.Exferia_Label_Total_TrazabilidadResumenTotales_Trazado_Principal.Text = string.Format("{0:0.000}", Funciones.RedondearDecimal(dcm_Total_Trazado_Principal, 3));
                g_frm_P_MovimientoAlmacenCabecera.Exferia_Label_Total_TrazabilidadResumenTotales_Diferencia_Principal.Text = string.Format("{0:0.000}", Funciones.RedondearDecimal(dcm_Total_Diferencia_Principal, 3));
                g_frm_P_MovimientoAlmacenCabecera.Exferia_Label_Total_TrazabilidadResumenTotales_TipoEmbalaje_Relacionado.Text = str_TipoEmbalaje_Relacionado;
                g_frm_P_MovimientoAlmacenCabecera.Exferia_Label_Total_TrazabilidadResumenTotales_Movimiento_Relacionado.Text = string.Format("{0:0.000}", Funciones.RedondearDecimal(dcm_Total_Movimiento_Relacionado, 3));
                g_frm_P_MovimientoAlmacenCabecera.Exferia_Label_Total_TrazabilidadResumenTotales_Trazado_Relacionado.Text = string.Format("{0:0.000}", Funciones.RedondearDecimal(dcm_Total_Trazado_Relacionado, 3));
                g_frm_P_MovimientoAlmacenCabecera.Exferia_Label_Total_TrazabilidadResumenTotales_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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Rellenar_Resumen_Totales_Trazabilidad));
            }
        }
        #endregion

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

            try
            {
                //OBTENEMOS DATOS DE MovimientoAlmacen_LINEA
                INTERNO_INV_MovimientosAlmacenLineas_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo = g_obj_INV_MovimientosAlmacenLineas_Datos.Obtener(_lng_IdMovimientoAlmacenLinea);

                //Rellenar el Modelo a Devolver
                arr_ObjetosADevolver[0] = mdl_INTERNO_INV_MovimientosAlmacenLineas_Modelo;
            }
            catch (Control_Errores)
            {
                arr_ObjetosADevolver = null;
            }
            catch (Exception ex)
            {
                arr_ObjetosADevolver = null;
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Obtener_Datos_ParaTrazabilidad));
            }
            return arr_ObjetosADevolver; 
        }
        public List<INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo> Obtener_MovimientoAlmacensLineas_Trazabilidad_Listado_PorLinea(long _lng_IdMovimientoAlmacenLinea)
        {
            List<INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo> lst_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo = null;

            try
            {
                INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo = g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Where(M => M.id.Equals(_lng_IdMovimientoAlmacenLinea)).FirstOrDefault();
                if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null &&
                    mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX != null &&
                    mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX.Count > 0)
                {
                    //Instanciar el Listado
                    lst_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX.Where(m=>m.idMovimientoAlmacenLinea.Equals(_lng_IdMovimientoAlmacenLinea)).ToList();
                }
            }
            catch (Exception ex)
            {
                lst_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo = null;
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Obtener_MovimientoAlmacensLineas_Trazabilidad_Listado_PorLinea));
            }

            return lst_INTERNO_INV_MovimientosAlmacenLineas_Trazabilidad_Listado_Modelo;
        }

        #endregion

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

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

                //2º--> SI CAMBIO LA DELEGACION ######################################################
                if (g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Origen.Equals(g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Id))
                {
                    return;
                }

                //Argumentos
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_Id);

                //(Tarea Asincrona) Cargar Datos .....................................................
                g_obj_TareaAsincrona_Cambio_Delegacion_Origen.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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Cambio_Delegacion_Origen));
            }
        }

        private void TareaAsincrona_Cambio_Delegacion_Origen_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_INV_MovimientosAlmacenLineas_Listado_Modelo != null && g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count > 0)
                {
                    foreach (INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo in g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo)
                    {
                        if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != 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_DESCARGAS.Codigo;

                            //Datos Actuales
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = lng_idDelegacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idAlmacen_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idUbicacion_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.operacion;

                            //Datos Anteriores
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Modificacion = true;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticuloComodin_Anterior = null;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idAlmacen_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idUbicacion_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_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)
                {
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR = Actualizar_Delegacion_Origen(lng_idDelegacion);
                    if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR.TodoCorrecto)
                    {
                        g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Origen = 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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Delegacion_Origen_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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Delegacion_Origen_DoWork));
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_Cambio_Delegacion_Origen_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_Origen_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_INV_MovimientosAlmacenCabecera_Modelo != null)
                    {
                        // Devolver al Listado el Row Añadido/Modificado
                        if (g_frm_P_MovimientoAlmacenCabecera.P_Base_PantallaOrigen != null)
                        {
                            g_frm_P_MovimientoAlmacenCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                        else if (g_frm_P_MovimientoAlmacenCabecera.P_Base_F3Origen != null)
                        {
                            g_frm_P_MovimientoAlmacenCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                    }

                    g_frm_P_MovimientoAlmacenCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Delegacion_Origen_Completed));
            }
        }

        private INTERNO_ValorDevuelto_Modelo Actualizar_Delegacion_Origen(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_INV_MovimientosAlmacenCabecera_Datos.Actualizar_Delegacion_Origen(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Actualizar_Delegacion_Origen));
            }


            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

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

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

                //2º--> SI CAMBIO LA DELEGACION ######################################################
                if (g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Destino.Equals(g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Id))
                {
                    return;
                }

                //Argumentos
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Destino.Exferia_F3_SoloSeleccion_Id);

                //(Tarea Asincrona) Cargar Datos .....................................................
                g_obj_TareaAsincrona_Cambio_Delegacion_Destino.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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Cambio_Delegacion_Destino));
            }
        }

        private void TareaAsincrona_Cambio_Delegacion_Destino_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_INV_MovimientosAlmacenLineas_Listado_Modelo != null && g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count > 0)
                {
                    foreach (INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo in g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo)
                    {
                        if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != 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_CARGAS.Codigo;

                            //Datos Actuales
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = lng_idDelegacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idAlmacen_Destino;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idUbicacion_Destino;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.operacion;

                            //Datos Anteriores
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Modificacion = true;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticuloComodin_Anterior = null;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Destino;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idAlmacen_Destino;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idUbicacion_Destino;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_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)
                {
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR = Actualizar_Delegacion_Destino(lng_idDelegacion);
                    if (mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZAR.TodoCorrecto)
                    {
                        g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Destino = 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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Delegacion_Destino_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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Delegacion_Destino_DoWork));
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_Cambio_Delegacion_Destino_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_Destino_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_INV_MovimientosAlmacenCabecera_Modelo != null)
                    {
                        // Devolver al Listado el Row Añadido/Modificado
                        if (g_frm_P_MovimientoAlmacenCabecera.P_Base_PantallaOrigen != null)
                        {
                            g_frm_P_MovimientoAlmacenCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                        else if (g_frm_P_MovimientoAlmacenCabecera.P_Base_F3Origen != null)
                        {
                            g_frm_P_MovimientoAlmacenCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                    }

                    g_frm_P_MovimientoAlmacenCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Delegacion_Destino_Completed));
            }
        }

        private INTERNO_ValorDevuelto_Modelo Actualizar_Delegacion_Destino(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_INV_MovimientosAlmacenCabecera_Datos.Actualizar_Delegacion_Destino(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Actualizar_Delegacion_Destino));
            }


            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Cambio de Fecha
        public void Cambio_Fecha()
        {
            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.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Cambio_Fecha_Completed);
                    g_obj_TareaAsincrona_Cambio_Fecha.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Cambio_Fecha.WorkerSupportsCancellation = true;
                }

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

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

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

                //(Tarea Asincrona) Cargar Datos .....................................................
                g_obj_TareaAsincrona_Cambio_Fecha.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_MovimientoAlmacenCabecera_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;
                //Delegacon
                DateTime dtt_Fecha = (DateTime)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_INV_MovimientosAlmacenLineas_Listado_Modelo != null && g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count > 0)
                {
                    foreach (INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo in g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo)
                    {
                        if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null)
                        {
                            #region ACTUALIZAR ARTICULO MOVIMIENTOS DIARIO 

                            #region ORIGEN
                            #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_DESCARGAS.Codigo;

                            //Datos Actuales
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Actual = dtt_Fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idAlmacen_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idUbicacion_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Actual = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.operacion;

                            //Datos Anteriores
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Modificacion = true;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticuloComodin_Anterior = null;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdArticulo_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Fecha_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdDelegacion_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdAlmacen_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idAlmacen_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.IdUbicacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idUbicacion_Origen;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.TipoCompraVentaOpcion_Anterior = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Relacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo.Operacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_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

                            #region DESTINO
                            #region Rellenar modelo
                            INTERNO_ArticuloDiarioActualizar_Documentos_Modelo mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO = new INTERNO_ArticuloDiarioActualizar_Documentos_Modelo();

                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.TipoDocumento = Variables.G_MDL_TIPODOCUMENTOS_MOVIMIENTOSARTICULOS_CARGAS.Codigo;

                            //Datos Actuales
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdArticulo_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Fecha_Actual = dtt_Fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdDelegacion_Actual = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Destino;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdAlmacen_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idAlmacen_Destino;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdUbicacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idUbicacion_Destino;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_SegundaUnidad_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.TipoCompraVentaOpcion_Actual = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Relacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Operacion_Actual = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.operacion;

                            //Datos Anteriores
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Modificacion = true;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdArticuloComodin_Anterior = null;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdArticulo_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idArticulo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Fecha_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.fecha;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdDelegacion_Anterior = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.idDelegacion_Destino;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdAlmacen_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idAlmacen_Destino;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.IdUbicacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.idUbicacion_Destino;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.TipoCompraVentaOpcion_Anterior = Variables.G_MDL_TIPOCOMPRAVENTA_OPCION_9.Codigo;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Cantidad_SegundaUnidad_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.segundaUnidad_cantidad;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Relacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.relacion;
                            mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO.Operacion_Anterior = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.operacion;
                            #endregion
                            mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS = Funciones_ArticuloMovimientosDiario.Actualizar_ArticuloMovimientoDiario(mdl_INTERNO_ArticuloDiarioActualizar_Documentos_Modelo_DESTINO);
                            if (!mdl_INTERNO_ValorDevuelto_Modelo_ACTUALIZARMOVIMIENTOSDIARIOS.TodoCorrecto)
                            {
                                break;
                            }
                            #endregion
                            #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_INV_MovimientosAlmacenCabecera_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_MovimientoAlmacenCabecera_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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cambio_Fecha_DoWork));
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        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);
                    }
                }
                else
                {
                    //Se actualizan el listado general, solo cuando ya estaba grabado la linea
                    if (g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo != null)
                    {
                        // Devolver al Listado el Row Añadido/Modificado
                        if (g_frm_P_MovimientoAlmacenCabecera.P_Base_PantallaOrigen != null)
                        {
                            g_frm_P_MovimientoAlmacenCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                        else if (g_frm_P_MovimientoAlmacenCabecera.P_Base_F3Origen != null)
                        {
                            g_frm_P_MovimientoAlmacenCabecera.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                        }
                    }

                    g_frm_P_MovimientoAlmacenCabecera.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientoAlmacenCabecera_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_INV_MovimientosAlmacenCabecera_Datos.Actualizar_Fecha(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_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_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Actualizar_Fecha));
            }


            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion


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

            //Buscar el Estado del MovimientoAlmacenCabecera
            if (g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo != null)
            {
                //Estado
                if (g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.estado != null &&
                    g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.estado.Trim().Length > 0)
                {
                    g_str_Estado = g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.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_MovimientoAlmacenCabecera.Exferia_Button_CerrarAbrir.Exferia_Button_Imagen = Imagenes.G_ENUM_IMAGENES.G_IMG_CERRADO;
                Imagenes.Asignar_Imagen(g_frm_P_MovimientoAlmacenCabecera.Exferia_Button_CerrarAbrir);
                g_frm_P_MovimientoAlmacenCabecera.Exferia_Button_CerrarAbrir.Tag = "1";

                //Bloqueo los Controles
                SoloLectura.Empezar(g_frm_P_MovimientoAlmacenCabecera, true);
            }
            //Abierto
            else
            {
                //Desbloqueo los Controles
                SoloLectura.Empezar(g_frm_P_MovimientoAlmacenCabecera, 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.Message, ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Cerrar_Documento));
            }
        }

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

            try
            {

                // Validar Primero
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_VALIDACION = ValidarDatos_CerrarDocumento();
                if (mdl_ValorDevuelto_Modelo_VALIDACION.TodoCorrecto)
                {
                    mdl_ValorDevuelto_Modelo =g_obj_INV_MovimientosAlmacenCabecera_Datos.Actualizar_Estado(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.id, Variables.G_STR_ESTADO_CONTABILIDAD_CERRADO);
                }
                else
                {
                    mdl_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_VALIDACION;
                }
                    
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cerrar_Documento_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_ERROR_CERRAR_DOCUMENTO();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_ERROR_CERRAR_DOCUMENTO();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Cerrar_Documento_DoWork));

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

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

            //Termino todo Correctamente
            if (mdl_INTERNO_ValorDevuelto_Modelo_CERRAR_TERMINO.TodoCorrecto)
            {
                g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.estado = Variables.G_STR_ESTADO_CONTABILIDAD_CERRADO;

                Mostrar_CerradoAbierto();

                //Actualizar registro en Listado principal
                if (g_frm_P_MovimientoAlmacenCabecera.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_INV_MovimientosAlmacenCabecera_Modelo.id, nameof(INTERNO_INV_MovimientosAlmacenCabecera_Listado_Modelo.estado), Variables.G_STR_ESTADO_CONTABILIDAD_CERRADO));

                    g_frm_P_MovimientoAlmacenCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistros_Campo(lst_INTERNO_ActualizarCampoListadoGeneral_Modelo, G_ENUM_TIPOACCION.INT_MODIFICAR);
                }
            }
            //Ocurrio un Error
            else
            {
                Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo_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 LineasMovimientoAlmacen
                if (g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo==null ||
                    g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Count==0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MOVIMIENTOSALMACEN_VALIDACION_NOHAYLINEAS();
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_MovimientoAlmacenCabecera.Exferia_F3_SoloSeleccion_Delegacion_Origen.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                //Validar las Trazabilidades
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    foreach (INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo in g_lst_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo)
                    {
                        if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo != null)
                        {
                            //PRINCIPAL
                            if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Articulo_TipoTrazabilidad.Equals(Variables.G_MDL_TIPOSTRAZABILIDAD_OBLIGATORIA.Codigo))
                            {
                                //Cantidad trazada
                                decimal dcm_CantidadPrincipal_TotalLineasTrazadas = 0;
                                if (mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX != null &&
                                    mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX.Count > 0)
                                {
                                    dcm_CantidadPrincipal_TotalLineasTrazadas = mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.MovimientosAlmacenLineas_Trazabilidad_AUX.Sum(m => m.cantidad);
                                }

                                //Si no esta trazado completamente
                                if ((mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.cantidad - dcm_CantidadPrincipal_TotalLineasTrazadas) != 0m)
                                {
                                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;

                                    string str_Linea = " linea nº " + mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.numeroLinea + " ( " + mdl_INTERNO_INV_MovimientosAlmacenLineas_Listado_Modelo.Articulo_Codigo + " - " + mdl_INTERNO_INV_MovimientosAlmacenLineas_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_MovimientoAlmacenCabecera_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.Message, ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(Abrir_Documento));
            }
        }

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

            try
            {
                mdl_ValorDevuelto_Modelo = g_obj_INV_MovimientosAlmacenCabecera_Datos.Actualizar_Estado(g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.id, Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO);
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Abrir_Documento_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_ERROR_ABRIR_DOCUMENTO();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_ERROR_ABRIR_DOCUMENTO();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_MovimientoAlmacenCabecera_Controladora) + "/" + nameof(TareaAsincrona_Abrir_Documento_DoWork));

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

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

            //Termino todo Correctamente
            if (mdl_INTERNO_ValorDevuelto_Modelo_ABRIR_TERMINO.TodoCorrecto)
            {
                g_mdl_INTERNO_INV_MovimientosAlmacenCabecera_Modelo.estado = Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO;

                Mostrar_CerradoAbierto();

                //Actualizar registro en Listado principal
                if (g_frm_P_MovimientoAlmacenCabecera.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_INV_MovimientosAlmacenCabecera_Modelo.id, nameof(INTERNO_INV_MovimientosAlmacenCabecera_Listado_Modelo.estado), Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO));

                    g_frm_P_MovimientoAlmacenCabecera.P_Base_PantallaOrigen.P_Base_ActualizarRegistros_Campo(lst_INTERNO_ActualizarCampoListadoGeneral_Modelo, G_ENUM_TIPOACCION.INT_MODIFICAR);
                }
            }
            //Ocurrio un Error
            else
            {
                Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo_ABRIR_TERMINO.Mensaje);
            }
        }

        #endregion
        #endregion
    }
}
