using ClosedXML.Excel;
using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Compras;
using Exferia_Aplicacion.Modelos_Existencias;
using Exferia_Aplicacion.Modelos_Maestros;
using Exferia_Aplicacion.Modelos_Ventas;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Controles;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_General;
using Exferia_Informes._0_Modelos;
using Exferia_Informes._1_Datos;
using Exferia_Informes._3_Vistas.Listados;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_Informes._3_Vistas.Controladoras
{
    public class P_ResumenImpuestos_Controladora
    {
        #region Variables Generales
        private P_ResumenImpuestos g_frm_P_ResumenImpuestos = 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

        #region Proveedores

        //Tarea Asincrona para la Rellenar DataGridView de Proveedoers
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Proveedores = null;
        public bool g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Proveedores = false;

        public List<INTERNO_MAE_Proveedores_ListadoSimple_Modelo> g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo = null;
        public List<INTERNO_MAE_Proveedores_ListadoSimple_Modelo> g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO = null;

        //Posiciones
        public int g_int_PosicionListado_Proveedores_Id = 0;
        public int g_int_PosicionListado_Proveedores_Seleccionar = 1;
        public int g_int_PosicionListado_Proveedores_Codigo = 2;
        public int g_int_PosicionListado_Proveedores_RazonSocial = 3;
        public int g_int_PosicionListado_Proveedores_NombreComercial = 4;
        #endregion

        #region Soportado
        //Tarea Asincrona para la Rellenar DataGridView de Soportados
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Soportados = null;
        public bool g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Soportados = false;

        public List<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo> g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo = null;
        public List<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo> g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_FILTRADO = null;

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

        public List<string> g_lst_ColumnasAMostrar_Soportado = new List<string>();
        public ABS_Listado_ResumenImpuestos_Soportados g_obj_ABS_Listado_ResumenImpuestos_Soportados = new ABS_Listado_ResumenImpuestos_Soportados();
        public Dictionary<string, object> g_dct_ListadoFiltros_Soportados = new Dictionary<string, object>();
        #endregion

        #region Clientes

        //Tarea Asincrona para la Rellenar DataGridView de Clientes
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Clientes = null;
        public bool g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Clientes = false;

        public List<INTERNO_MAE_Clientes_ListadoSimple_Modelo> g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo = null;
        public List<INTERNO_MAE_Clientes_ListadoSimple_Modelo> g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO = null;

        //Posiciones
        public int g_int_PosicionListado_Clientes_Id = 0;
        public int g_int_PosicionListado_Clientes_Seleccionar = 1;
        public int g_int_PosicionListado_Clientes_Codigo = 2;
        public int g_int_PosicionListado_Clientes_RazonSocial = 3;
        public int g_int_PosicionListado_Clientes_NombreComercial = 4;
        #endregion

        #region Repercutido
        //Tarea Asincrona para la Rellenar DataGridView de Repercutido
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Repercutidos = null;
        public bool g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Repercutidos = false;

        public List<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo> g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo = null;
        public List<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo> g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_FILTRADO = null;

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

        public List<string> g_lst_ColumnasAMostrar_Repercutido = new List<string>();
        public ABS_Listado_ResumenImpuestos_Repercutidos g_obj_ABS_Listado_ResumenImpuestos_Repercutidos = new ABS_Listado_ResumenImpuestos_Repercutidos();
        public Dictionary<string, object> g_dct_ListadoFiltros_Repercutidos = new Dictionary<string, object>();
        #endregion

        #region Resumen
        //Tarea Asincrona para la Rellenar DataGridView de Resumen
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Resumen = null;
        public bool g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Resumen = false;

        public List<INTERNO_ResumenImpuestos_Listado_Modelo> g_lst_INTERNO_ResumenImpuestos_Listado_Modelo = null;

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

        public List<string> g_lst_ColumnasAMostrar_Resumen = new List<string>();
        public ABS_Listado_ResumenImpuestos g_obj_ABS_Listado_ResumenImpuestos = new ABS_Listado_ResumenImpuestos();
        public Dictionary<string, object> g_dct_ListadoFiltros_Resumen = new Dictionary<string, object>();

        #region Titulos
        private string g_str_Titulos_TipoResumen_Soportado = "SOPORTADO";
        private string g_str_Titulos_TipoResumen_Repercutido = "REPERCUTIDO";

        private string g_str_Titulos_Naturaleza_Impuestos = "IMPUESTOS";
        private string g_str_Titulos_Naturaleza_Exento = "EXENTO";
        private string g_str_Titulos_Naturaleza_Negativas = "NEGATIVAS";
        private string g_str_Titulos_Naturaleza_ExentoNegativas = "EXENTO-NEGATIVAS";

        private string g_str_Titulos_Suma_Soportados = "SUMA SOPORTADOS";
        private string g_str_Titulos_Suma_Repercutidos = "SUMA REPERCUTIDOS";
        private string g_str_Titulos_Suma_TipoImpuestos = "SUMA TIPO DE IMPUESTOS";
        private string g_str_Titulos_Suma_Delegacion = "SUMA DELEGACION";
        private string g_str_Titulos_Suma_TablaImpuestos = "SUMA TABLA IMPUESTOS";

        private string g_str_Titulos_Resumen_RepercutidoSoportado = "RESUMEN REPERCUTIDO-SOPORTADO";

        private string g_str_Titulos_Cabecera_TipoImpuestos = "Tipo Imp.";
        private string g_str_Titulos_Cabecera_BaseImponible = "Base Imp.";
        private string g_str_Titulos_Cabecera_ImpuestoPorcentaje = "Imp. %";
        private string g_str_Titulos_Cabecera_Impuesto = "Impuesto";
        private string g_str_Titulos_Cabecera_BaseRecargo = "Base R.E.";
        private string g_str_Titulos_Cabecera_RecargoPorcentaje = "R.E. %";
        private string g_str_Titulos_Cabecera_Recargo = "R.E.";
        private string g_str_Titulos_Cabecera_TotalImpuesto = "Total Imp.";
        private string g_str_Titulos_Cabecera_TotalFinal = "Total Final";
        #endregion

        #region Tipo de linea Para Informes Excel y Report
        private string g_str_TipoLinea_Soportado_Tipo = "11";
        private string g_str_TipoLinea_Soportado_Impuesto = "12";
        private string g_str_TipoLinea_Soportado_Delegacion = "13";
        private string g_str_TipoLinea_Soportado_Naturaleza = "14";
        private string g_str_TipoLinea_Soportado_Lineas = "15";
        private string g_str_TipoLinea_Soportado_SumaNaturaleza = "14";
        private string g_str_TipoLinea_Soportado_SumaDelegacion = "13";
        private string g_str_TipoLinea_Soportado_SumaTablaImpuestos = "12";
        private string g_str_TipoLinea_Soportado_SumaTipo = "11";

        private string g_str_TipoLinea_Repercutido_Tipo = "21";
        private string g_str_TipoLinea_Repercutido_Impuesto = "22";
        private string g_str_TipoLinea_Repercutido_Delegacion = "23";
        private string g_str_TipoLinea_Repercutido_Naturaleza = "24";
        private string g_str_TipoLinea_Repercutido_Lineas = "25";
        private string g_str_TipoLinea_Repercutido_SumaNaturaleza = "24";
        private string g_str_TipoLinea_Repercutido_SumaDelegacion = "23";
        private string g_str_TipoLinea_Repercutido_SumaTablaImpuestos = "22";
        private string g_str_TipoLinea_Repercutido_SumaTipo = "21";

        private string g_str_TipoLinea_Resumen = "30";
        #endregion

        #endregion

        #endregion

        #region Constructor
        public P_ResumenImpuestos_Controladora(P_ResumenImpuestos _frm_P_ResumenImpuestos)
        {
            g_frm_P_ResumenImpuestos = _frm_P_ResumenImpuestos;
        }
        #endregion

        #region Carga Inicial
        public void CargaInicial()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_ResumenImpuestos.Enabled = false;

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

                BackgroundWorker obj_TareaAsincrona_CargaInicial = new BackgroundWorker();
                obj_TareaAsincrona_CargaInicial.DoWork += new DoWorkEventHandler(TareaAsincrona_CargaInicial_DoWork);
                obj_TareaAsincrona_CargaInicial.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargaInicial_Completed);
                obj_TareaAsincrona_CargaInicial.WorkerReportsProgress = false;

                //(Tarea Asincrona) ##################################################################
                obj_TareaAsincrona_CargaInicial.RunWorkerAsync();
                //#################################################################################################

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

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

                throw new Control_Errores("", ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(CargaInicial), true);
            }
        }
        private void TareaAsincrona_CargaInicial_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            try
            {
                #region Proveedores
                Assembly m_assembly2 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                Type m_type2 = m_assembly2.GetType("" + Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                var obj_Clase2 = Activator.CreateInstance(m_type2);
                MethodInfo obj_MethodInfo2 = obj_Clase2.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEPROVEEDORES_OBTENER_PARALISTADOSIMPLE, BindingFlags.Instance | BindingFlags.NonPublic);
                object[] arr_Parametros2 = {};
                g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo = (List<INTERNO_MAE_Proveedores_ListadoSimple_Modelo>)obj_MethodInfo2.Invoke(obj_Clase2, arr_Parametros2);
                #endregion
                
                #region Clientes
                Assembly m_assembly3 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                Type m_type3 = m_assembly3.GetType("" + Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                var obj_Clase3 = Activator.CreateInstance(m_type3);
                MethodInfo obj_MethodInfo3 = obj_Clase3.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAECLIENTES_OBTENER_PARALISTADOSIMPLE, BindingFlags.Instance | BindingFlags.NonPublic);
                object[] arr_Parametros3 = { };
                g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo = (List<INTERNO_MAE_Clientes_ListadoSimple_Modelo>)obj_MethodInfo3.Invoke(obj_Clase3, arr_Parametros3);
                #endregion
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(TareaAsincrona_CargaInicial_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_ResumenImpuestos_Controladora) + "/" + nameof(TareaAsincrona_CargaInicial_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_CargaInicial_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            //Desbloquear el formulario
            g_frm_P_ResumenImpuestos.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_ResumenImpuestos.Salir_P_Base();
                }
                else
                {
                    Rellenar_DataGrid_Proveedores(g_frm_P_ResumenImpuestos.Exferia_TextBox_Proveedores_Buscar.Text);
                    Rellenar_DataGrid_Clientes(g_frm_P_ResumenImpuestos.Exferia_TextBox_Clientes_Buscar.Text);
                }
            }
            catch (Exception ex)
            {

                Control_Errores.Errores_Log("", ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(TareaAsincrona_CargaInicial_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_ResumenImpuestos.Salir_P_Base();
            }
        }
        #endregion

        #region Rellenar DataGrid Proveedores
        public void Rellenar_DataGrid_Proveedores(string _str_Buscar)
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Proveedores != null)
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Proveedores.CancelAsync();
                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Proveedores.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Proveedores = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Proveedores.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Proveedores_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Proveedores.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Proveedores_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Proveedores.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Proveedores_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Proveedores.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Proveedores.WorkerSupportsCancellation = true;
                }
                //Vaciar el Listado
                g_frm_P_ResumenImpuestos.Exferia_DataGridView_Proveedores.Rows.Clear();
             

                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_Buscar);
                lst_Argumentos.Add(g_frm_P_ResumenImpuestos.Exferia_CheckBox_Proveedores_PalabraCompleta.Checked);
                lst_Argumentos.Add(g_frm_P_ResumenImpuestos.Exferia_CheckBox_Proveedores_MayusculasMinusculas.Checked);
                lst_Argumentos.Add(g_frm_P_ResumenImpuestos.Exferia_CheckBox_Proveedores_DadosDeBaja.Checked);
                lst_Argumentos.Add(g_frm_P_ResumenImpuestos.Exferia_CheckBox_Proveedores_Bolsa.Checked);


                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_Rellenar_DataGrid_Proveedores.RunWorkerAsync(lst_Argumentos);
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(Rellenar_DataGrid_Proveedores));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Proveedores_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Argumentos
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Buscar = (string)lst_Argumentos[0];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[1];
                bool bol_MayusculasMinusculas = (bool)lst_Argumentos[2];
                bool bol_DadosBaja = (bool)lst_Argumentos[3];
                bool bol_Bolsa = (bool)lst_Argumentos[4];

                g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO = null;

                if (g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo != null && g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Count > 0)
                {
                    //Primero clono el listado para siempre tener todos los proveedores y solo modificar este
                    g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO = new List<INTERNO_MAE_Proveedores_ListadoSimple_Modelo>(g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo);

                    //Filtrar para mostrar tambien los proveedores de baja
                    if (bol_DadosBaja)
                    {
                        g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO.Where(x => x.FechaBaja == null || x.FechaBaja >= g_frm_P_ResumenImpuestos.P_Base_FechaTrabajo).ToList();
                    }

                    //Bolsa
                    if (g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO.Count>0 && bol_Bolsa)
                    {
                        g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO.Where(x => x.Bolsa).ToList();
                    }

                    //Tiene Filtro
                    if (str_Buscar.Trim().Length > 0)
                    {
                        //Palabra Completa
                        if (bol_PalabraCompleta)
                        {
                            //Sencible a mayusculas y minusculas
                            if (bol_MayusculasMinusculas)
                            {
                                g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO.Where(m => m.Codigo == str_Buscar || m.RazonSocial == str_Buscar || m.NombreComercial == str_Buscar).ToList();
                            }
                            //No tiene en cuenta las mayusculas y las minusculas
                            else
                            {
                                g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO.Where(m => m.Codigo.ToUpper() == str_Buscar.ToUpper() || m.RazonSocial.ToUpper() == str_Buscar.ToUpper() || m.NombreComercial.ToUpper() == str_Buscar.ToUpper()).ToList();
                            }
                        }
                        //Por Contenido
                        else
                        {
                            //Sencible a mayusculas y minusculas
                            if (bol_MayusculasMinusculas)
                            {
                                g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO.Where(m => m.Codigo.Contains(str_Buscar) || m.RazonSocial.Contains(str_Buscar) || m.NombreComercial.Contains(str_Buscar)).ToList();
                            }
                            //No tiene en cuenta las mayusculas y las minusculas
                            else
                            {
                                g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO.Where(m => m.Codigo.ToUpper().Contains(str_Buscar.ToUpper()) || m.RazonSocial.ToUpper().Contains(str_Buscar.ToUpper()) || m.NombreComercial.ToUpper().Contains(str_Buscar.ToUpper())).ToList();
                            }
                        }

                    }

                    if (g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO != null && g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO.Count > 0)
                    {
                        foreach (INTERNO_MAE_Proveedores_ListadoSimple_Modelo mdl_INTERNO_MAE_Proveedores_ListadoSimple_Modelo in g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo_FILTRADO.OrderBy(m => m.RazonSocial))
                        {
                            //Se Cancelo la tarea asincrona #########################
                            if (((BackgroundWorker)sender).CancellationPending)
                            {
                                e.Cancel = true;
                                return;
                            }

                            //Añadir al DataGridView
                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Proveedores(mdl_INTERNO_MAE_Proveedores_ListadoSimple_Modelo, null));

                            //Esperar un poco
                            Thread.Sleep(1);
                        }
                    }
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Proveedores_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (!g_frm_P_ResumenImpuestos.IsDisposed && e.ProgressPercentage == 1)
                {
                    DataGridViewRow dgrv_Fila = (DataGridViewRow)e.UserState;
                    g_frm_P_ResumenImpuestos.Exferia_DataGridView_Proveedores.Rows.Add(dgrv_Fila);
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Proveedores_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        public DataGridViewRow Transformar_Modelo_A_Row_Proveedores(INTERNO_MAE_Proveedores_ListadoSimple_Modelo _mdl_INTERNO_MAE_Proveedores_ListadoSimple_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Proveedores.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Proveedores);
            }

            obj_DataGridViewRow.Cells[g_int_PosicionListado_Proveedores_Id].Value = _mdl_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Id;
            obj_DataGridViewRow.Cells[g_int_PosicionListado_Proveedores_Seleccionar].Value = _mdl_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Seleccionar;
            obj_DataGridViewRow.Cells[g_int_PosicionListado_Proveedores_Codigo].Value = _mdl_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Codigo;
            obj_DataGridViewRow.Cells[g_int_PosicionListado_Proveedores_RazonSocial].Value = _mdl_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.RazonSocial;
            obj_DataGridViewRow.Cells[g_int_PosicionListado_Proveedores_NombreComercial].Value = _mdl_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.NombreComercial;

            return obj_DataGridViewRow;
        }

        public void Actualizar_Proveedores_Seleccionado(long _lng_idProveedor, bool _bol_Valor)
        {
            try
            {
                //Busco registro listado en memoria
                dynamic dnm_Registro = g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo[g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.IndexOf(g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Where(m => m.Id == _lng_idProveedor).FirstOrDefault())];

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


                    //Modificar listado en memoria
                    g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo[g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.IndexOf(g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Where(m => m.Id == _lng_idProveedor).FirstOrDefault())] = dnm_Registro;
                }
            }
            catch (Exception)
            { }
        }
        public void Desmarcar_Proveedores_Seleccionados_Colectivo()
        {
            try
            {
                //Actualizar el listado de registro general
                g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Where(m => m.Seleccionar).ToList().ForEach(x => x.GetType().GetProperty(nameof(INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Seleccionar)).SetValue(x, false, null));

                Rellenar_DataGrid_Proveedores(g_frm_P_ResumenImpuestos.Exferia_TextBox_Proveedores_Buscar.Text);
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Rellenar DataGrid Clientes
        public void Rellenar_DataGrid_Clientes(string _str_Buscar)
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Clientes != null)
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Clientes.CancelAsync();
                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Clientes.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Clientes = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Clientes.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Clientes_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Clientes.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Clientes_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Clientes.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Clientes_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Clientes.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Clientes.WorkerSupportsCancellation = true;
                }
                //Vaciar el Listado
                g_frm_P_ResumenImpuestos.Exferia_DataGridView_Clientes.Rows.Clear();


                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_Buscar);
                lst_Argumentos.Add(g_frm_P_ResumenImpuestos.Exferia_CheckBox_Clientes_PalabraCompleta.Checked);
                lst_Argumentos.Add(g_frm_P_ResumenImpuestos.Exferia_CheckBox_Clientes_MayusculasMinusculas.Checked);
                lst_Argumentos.Add(g_frm_P_ResumenImpuestos.Exferia_CheckBox_Clientes_DadosDeBaja.Checked);
                lst_Argumentos.Add(g_frm_P_ResumenImpuestos.Exferia_CheckBox_Clientes_Bolsa.Checked);


                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_Rellenar_DataGrid_Clientes.RunWorkerAsync(lst_Argumentos);
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(Rellenar_DataGrid_Clientes));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Clientes_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Argumentos
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Buscar = (string)lst_Argumentos[0];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[1];
                bool bol_MayusculasMinusculas = (bool)lst_Argumentos[2];
                bool bol_DadosBaja = (bool)lst_Argumentos[3];
                bool bol_Bolsa = (bool)lst_Argumentos[4];

                g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO = null;

                if (g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo != null && g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo.Count > 0)
                {
                    //Primero clono el listado para siempre tener todos los Clientes y solo modificar este
                    g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO = new List<INTERNO_MAE_Clientes_ListadoSimple_Modelo>(g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo);

                    //Filtrar para mostrar tambien los Clientes de baja
                    if (bol_DadosBaja)
                    {
                        g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO.Where(x => x.FechaBaja == null || x.FechaBaja >= g_frm_P_ResumenImpuestos.P_Base_FechaTrabajo).ToList();
                    }

                    //Bolsa
                    if (g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO.Count > 0 && bol_Bolsa)
                    {
                        g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO.Where(x => x.Bolsa).ToList();
                    }

                    //Tiene Filtro
                    if (str_Buscar.Trim().Length > 0)
                    {
                        //Palabra Completa
                        if (bol_PalabraCompleta)
                        {
                            //Sencible a mayusculas y minusculas
                            if (bol_MayusculasMinusculas)
                            {
                                g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO.Where(m => m.Codigo == str_Buscar || m.RazonSocial == str_Buscar || m.NombreComercial == str_Buscar).ToList();
                            }
                            //No tiene en cuenta las mayusculas y las minusculas
                            else
                            {
                                g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO.Where(m => m.Codigo.ToUpper() == str_Buscar.ToUpper() || m.RazonSocial.ToUpper() == str_Buscar.ToUpper() || m.NombreComercial.ToUpper() == str_Buscar.ToUpper()).ToList();
                            }
                        }
                        //Por Contenido
                        else
                        {
                            //Sencible a mayusculas y minusculas
                            if (bol_MayusculasMinusculas)
                            {
                                g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO.Where(m => m.Codigo.Contains(str_Buscar) || m.RazonSocial.Contains(str_Buscar) || m.NombreComercial.Contains(str_Buscar)).ToList();
                            }
                            //No tiene en cuenta las mayusculas y las minusculas
                            else
                            {
                                g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO = g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO.Where(m => m.Codigo.ToUpper().Contains(str_Buscar.ToUpper()) || m.RazonSocial.ToUpper().Contains(str_Buscar.ToUpper()) || m.NombreComercial.ToUpper().Contains(str_Buscar.ToUpper())).ToList();
                            }
                        }

                    }

                    if (g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO != null && g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO.Count > 0)
                    {
                        foreach (INTERNO_MAE_Clientes_ListadoSimple_Modelo mdl_INTERNO_MAE_Clientes_ListadoSimple_Modelo in g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo_FILTRADO.OrderBy(m => m.RazonSocial))
                        {
                            //Se Cancelo la tarea asincrona #########################
                            if (((BackgroundWorker)sender).CancellationPending)
                            {
                                e.Cancel = true;
                                return;
                            }

                            //Añadir al DataGridView
                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Clientes(mdl_INTERNO_MAE_Clientes_ListadoSimple_Modelo, null));

                            //Esperar un poco
                            Thread.Sleep(1);
                        }
                    }
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Clientes_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (!g_frm_P_ResumenImpuestos.IsDisposed && e.ProgressPercentage == 1)
                {
                    DataGridViewRow dgrv_Fila = (DataGridViewRow)e.UserState;
                    g_frm_P_ResumenImpuestos.Exferia_DataGridView_Clientes.Rows.Add(dgrv_Fila);
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Clientes_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        public DataGridViewRow Transformar_Modelo_A_Row_Clientes(INTERNO_MAE_Clientes_ListadoSimple_Modelo _mdl_INTERNO_MAE_Clientes_ListadoSimple_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Clientes.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Clientes);
            }

            obj_DataGridViewRow.Cells[g_int_PosicionListado_Clientes_Id].Value = _mdl_INTERNO_MAE_Clientes_ListadoSimple_Modelo.Id;
            obj_DataGridViewRow.Cells[g_int_PosicionListado_Clientes_Seleccionar].Value = _mdl_INTERNO_MAE_Clientes_ListadoSimple_Modelo.Seleccionar;
            obj_DataGridViewRow.Cells[g_int_PosicionListado_Clientes_Codigo].Value = _mdl_INTERNO_MAE_Clientes_ListadoSimple_Modelo.Codigo;
            obj_DataGridViewRow.Cells[g_int_PosicionListado_Clientes_RazonSocial].Value = _mdl_INTERNO_MAE_Clientes_ListadoSimple_Modelo.RazonSocial;
            obj_DataGridViewRow.Cells[g_int_PosicionListado_Clientes_NombreComercial].Value = _mdl_INTERNO_MAE_Clientes_ListadoSimple_Modelo.NombreComercial;

            return obj_DataGridViewRow;
        }

        public void Actualizar_Clientes_Seleccionado(long _lng_idCliente, bool _bol_Valor)
        {
            try
            {
                //Busco registro listado en memoria
                dynamic dnm_Registro = g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo[g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo.IndexOf(g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo.Where(m => m.Id == _lng_idCliente).FirstOrDefault())];

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


                    //Modificar listado en memoria
                    g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo[g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo.IndexOf(g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo.Where(m => m.Id == _lng_idCliente).FirstOrDefault())] = dnm_Registro;
                }
            }
            catch (Exception)
            { }
        }
        public void Desmarcar_Clientes_Seleccionados_Colectivo()
        {
            try
            {
                //Actualizar el listado de registro general
                g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo.Where(m => m.Seleccionar).ToList().ForEach(x => x.GetType().GetProperty(nameof(INTERNO_MAE_Clientes_ListadoSimple_Modelo.Seleccionar)).SetValue(x, false, null));

                Rellenar_DataGrid_Clientes(g_frm_P_ResumenImpuestos.Exferia_TextBox_Clientes_Buscar.Text);
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Generar Informe
        public void Generar_Informe()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_ResumenImpuestos.Enabled = false;

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

                BackgroundWorker obj_TareaAsincrona_GenerarInforme = new BackgroundWorker();
                obj_TareaAsincrona_GenerarInforme.DoWork += new DoWorkEventHandler(TareaAsincrona_GenerarInforme_DoWork);
                obj_TareaAsincrona_GenerarInforme.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_GenerarInforme_Completed);
                obj_TareaAsincrona_GenerarInforme.WorkerReportsProgress = false;

                //Vaciar
                g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo = null;
                g_frm_P_ResumenImpuestos.Exferia_DataGridView_Soportados.Rows.Clear();

                g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo = null;
                g_frm_P_ResumenImpuestos.Exferia_DataGridView_Repercutidos.Rows.Clear();

                //(Tarea Asincrona) ##################################################################
                obj_TareaAsincrona_GenerarInforme.RunWorkerAsync();
                //#################################################################################################

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

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

                Control_Errores.Errores_Log("", ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(Generar_Informe));
            }
        }
        private void TareaAsincrona_GenerarInforme_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                // Validar Primero
                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION = ValidarDatos();
                if (mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION.TodoCorrecto)
                {
                    //Fechas
                    DateTime dtt_FechaDesde = DateTime.ParseExact(g_frm_P_ResumenImpuestos.Exferia_FechaSeleccion_FechaDesde.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                    DateTime dtt_FechaHasta = DateTime.ParseExact(g_frm_P_ResumenImpuestos.Exferia_FechaSeleccion_FechaHasta.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                    //Delegacion
                    long? lng_idDelegacion = null;
                    if (g_frm_P_ResumenImpuestos.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Id > -1)
                    {
                        lng_idDelegacion = g_frm_P_ResumenImpuestos.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Id;
                    }

                    #region Informe de Soportado
                    if (g_frm_P_ResumenImpuestos.Exferia_CheckBox_Soportado.Checked)
                    {
                        //Listado de proveedores Seleccionados
                        List<long> lst_IdProveedor = g_lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Where(m => m.Seleccionar).Select(m => m.Id).ToList();

                        //Buscar las facturas
                        Assembly m_assembly2 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_COMPRAS + ".dll");
                        Type m_type2 = m_assembly2.GetType("" + Variables.G_STR_LIBRERIA_COMPRAS + "." + Variables.G_STR_LIBRERIA_DATOSCOMPRAS);
                        var obj_Clase2 = Activator.CreateInstance(m_type2);
                        MethodInfo obj_MethodInfo2 = obj_Clase2.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCOMPRAS_PROCEDIMIENTO_COMFACTURASCABECERA_OBTENER_PARA_RESUMENIMPUESTOS, BindingFlags.Instance | BindingFlags.NonPublic);
                        object[] arr_Parametros2 = { dtt_FechaDesde , dtt_FechaHasta , lng_idDelegacion , lst_IdProveedor };
                        g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo = (List<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo>)obj_MethodInfo2.Invoke(obj_Clase2, arr_Parametros2);
                    }
                    #endregion

                    #region Informe de Repercutido
                    if (g_frm_P_ResumenImpuestos.Exferia_CheckBox_Repercutida.Checked)
                    {
                        //Listado de Clientes Seleccionados
                        List<long> lst_IdClientes = g_lst_INTERNO_MAE_Clientes_ListadoSimple_Modelo.Where(m => m.Seleccionar).Select(m => m.Id).ToList();

                        //Buscar las facturas
                        Assembly m_assembly2 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_VENTAS + ".dll");
                        Type m_type2 = m_assembly2.GetType("" + Variables.G_STR_LIBRERIA_VENTAS + "." + Variables.G_STR_LIBRERIA_DATOSVENTAS);
                        var obj_Clase2 = Activator.CreateInstance(m_type2);
                        MethodInfo obj_MethodInfo2 = obj_Clase2.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSVENTAS_PROCEDIMIENTO_VTAFACTURASCABECERA_OBTENER_PARA_RESUMENIMPUESTOS, BindingFlags.Instance | BindingFlags.NonPublic);
                        object[] arr_Parametros2 = { dtt_FechaDesde, dtt_FechaHasta, lng_idDelegacion, lst_IdClientes };
                        g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo = (List<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo>)obj_MethodInfo2.Invoke(obj_Clase2, arr_Parametros2);
                    }
                    #endregion
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_VALIDACION;
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(TareaAsincrona_GenerarInforme_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(TareaAsincrona_GenerarInforme_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_GenerarInforme_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            //Desbloquear el formulario
            g_frm_P_ResumenImpuestos.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_ResumenImpuestos.Salir_P_Base();
                }
                else
                {
                    Rellenar_DataGrid_Soportados();
                    Rellenar_DataGrid_Repercutidos();
                    Rellenar_DataGrid_Resumen();
                }
            }
            catch (Exception ex)
            {

                Control_Errores.Errores_Log("", ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(TareaAsincrona_GenerarInforme_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
            }
        }
        public INTERNO_ValorDevuelto_Modelo ValidarDatos()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;


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

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

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

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

                // Si hay Delegacion validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_ResumenImpuestos.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_ResumenImpuestos.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_ResumenImpuestos.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_ResumenImpuestos.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_ResumenImpuestos.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }                
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(ValidarDatos));

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

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Rellenar DataGrid Soportados
        public void Rellenar_DataGrid_Soportados()
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Soportados != null)
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Soportados.CancelAsync();
                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Soportados.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Soportados = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Soportados.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Soportados_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Soportados.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Soportados_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Soportados.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Soportados_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Soportados.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Soportados.WorkerSupportsCancellation = true;
                }
                //Vaciar el Listado
                g_frm_P_ResumenImpuestos.Exferia_DataGridView_Soportados.Rows.Clear();

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_Rellenar_DataGrid_Soportados.RunWorkerAsync();
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(Rellenar_DataGrid_Soportados));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Soportados_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_FILTRADO = null;

                if (g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo != null && g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.Count > 0)
                {
 
                    //Filtros Avanzados
                    if (g_dct_ListadoFiltros_Soportados != null && g_dct_ListadoFiltros_Soportados.Count > 0)
                    {
                        g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_FILTRADO= g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.AsQueryable().Where(Funciones_Lambda.Formar_EmpresionLambda_Filtrado<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo>(g_dct_ListadoFiltros_Soportados, g_obj_ABS_Listado_ResumenImpuestos_Soportados)).ToList();
                    }
                    else
                    {
                        g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_FILTRADO= g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.AsQueryable().ToList();
                    }
                    
                    if (g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_FILTRADO != null && g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_FILTRADO.Count > 0)
                    {
                        int int_ContadorFila = 0;
                        //AGRUPACION POR IMPUESTO CABECERA
                        foreach (var obj_ImpuestoCabecera in g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_FILTRADO.OrderBy(m=>m.ImpuestoCabecera).GroupBy(x => new { x.ImpuestoCabecera_Id,x.ImpuestoCabecera }).Select(g => g.Key).ToList())
                        {
                            //Se Cancelo la tarea asincrona #########################
                            if (((BackgroundWorker)sender).CancellationPending)
                            {
                                e.Cancel = true;
                                return;
                            }
                            //Añadir al DataGridView
                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Soportados_ImpuestoCabecera(obj_ImpuestoCabecera.ImpuestoCabecera));
                            //Esperar un poco
                            Thread.Sleep(1);
                            int_ContadorFila += 1;

                            //AGRUPACION POR DELEGACION
                            foreach (var obj_Delegacion in g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_FILTRADO.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id).OrderBy(m=>m.Delegacion).GroupBy(x => new { x.Delegacion_Id,x.Delegacion }).Select(g => g.Key).ToList())
                            {
                                //Se Cancelo la tarea asincrona #########################
                                if (((BackgroundWorker)sender).CancellationPending)
                                {
                                    e.Cancel = true;
                                    return;
                                }
                                //Añadir al DataGridView
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Soportados_Delegacion(obj_Delegacion.Delegacion));
                                //Esperar un poco
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                long lng_idFacturaCompra = -1;
                                foreach (INTERNO_ResumenImpuestos_Soportado_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo in g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_FILTRADO.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id && m.Delegacion_Id== obj_Delegacion.Delegacion_Id).OrderBy(m => m.NumeroDocumento))
                                {
                                    //Se Cancelo la tarea asincrona #########################
                                    if (((BackgroundWorker)sender).CancellationPending)
                                    {
                                        e.Cancel = true;
                                        return;
                                    }

                                    INTERNO_ResumenImpuestos_Soportado_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO = new INTERNO_ResumenImpuestos_Soportado_Listado_Modelo();
                                    Funciones.CopiarPropiedadesObjetos(mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo,mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO, false, false);

                                    //Si la FacturaCompraCambia no se vacian los datos de la cabecera
                                    if (lng_idFacturaCompra== mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO.id)
                                    {
                                        mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO.NumeroFactura = "";
                                        mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO.FechaDeclaracion =null;
                                        mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO.Fecha = null;
                                        mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO.Factura = "";
                                        mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO.Proveedor_RazonSocial = "";
                                        mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO.Proveedor_CIF = "";
                                        mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO.estado_Vaciado = true;
                                        mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO.Boton_Ver = "";
                                    }
                                    else
                                    {
                                        mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO.Boton_Ver = "Ver";
                                    }

                                    //Añadir al DataGridView
                                    ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Soportados(mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO, int_ContadorFila));

                                    int_ContadorFila += 1;
                                    lng_idFacturaCompra = mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NUEVO.id;

                                    //Esperar un poco
                                    Thread.Sleep(1);
                                }
                            }
                        }
                    }
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Soportados_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (!g_frm_P_ResumenImpuestos.IsDisposed && e.ProgressPercentage == 1)
                {
                    DataGridViewRow dgrv_Fila = (DataGridViewRow)e.UserState;
                    g_frm_P_ResumenImpuestos.Exferia_DataGridView_Soportados.Rows.Add(dgrv_Fila);
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Soportados_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        public DataGridViewRow Transformar_Modelo_A_Row_Soportados_ImpuestoCabecera(string _str_ImpuestoCabecera)
        {
            DataGridViewRow obj_DataGridViewRow =  (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Soportados.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Soportados);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Soportado_Columnas)
            {
                //Si es Impuesto
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna==nameof(INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.ImpuestoCabecera))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_ImpuestoCabecera;
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Soportados_Delegacion(string _str_Delegacion)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Soportados.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Soportados);


            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Soportado_Columnas)
            {
                //Si es Delegacion
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.Delegacion))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Delegacion;
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Soportados(INTERNO_ResumenImpuestos_Soportado_Listado_Modelo _mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo,int _int_ContadorFila)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Soportados.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Soportados);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Soportado_Columnas)
            {
                //Que no sea ni impuestocabecera ni delegacion
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna != nameof(INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.ImpuestoCabecera) &&
                    mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna != nameof(INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.Delegacion))
                {
                    //Segun el Tipo
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                    {
                        DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Soportado_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_ResumenImpuestos_Soportado_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Soportado_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_ResumenImpuestos_Soportado_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Soportado_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_ResumenImpuestos_Soportado_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Soportado_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_ResumenImpuestos_Soportado_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Soportado_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_ResumenImpuestos_Soportado_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Soportado_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_ResumenImpuestos_Soportado_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo, null);
                    }
                }

                int_ContadorFila += 1;
            }


            //Si es de Estado Abierto se cambio el color de la fila
            if (_mdl_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.estado==Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO)
            {
                if ((_int_ContadorFila % 2) == 0)
                {
                    obj_DataGridViewRow.DefaultCellStyle.BackColor = Colores.G_COLOR_FONDO_RESUMENIMPUESTOS_ESTADOABIERTO;
                    obj_DataGridViewRow.DefaultCellStyle.ForeColor = Colores.G_COLOR_LETRA_RESUMENIMPUESTOS_ESTADOABIERTO;
                }
                else
                {
                    obj_DataGridViewRow.DefaultCellStyle.BackColor = Colores.G_COLOR_FONDO_RESUMENIMPUESTOS_ESTADOABIERTO_ALTERNATIVO;
                    obj_DataGridViewRow.DefaultCellStyle.ForeColor = Colores.G_COLOR_LETRA_RESUMENIMPUESTOS_ESTADOABIERTO_ALTERNATIVO;
                }
            }

            return obj_DataGridViewRow;
        }
        #endregion

        #region Rellenar DataGrid Repercutido
        public void Rellenar_DataGrid_Repercutidos()
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Repercutidos != null)
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Repercutidos.CancelAsync();
                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Repercutidos.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Repercutidos = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Repercutidos.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Repercutidos_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Repercutidos.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Repercutidos_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Repercutidos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Repercutidos_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Repercutidos.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Repercutidos.WorkerSupportsCancellation = true;
                }
                //Vaciar el Listado
                g_frm_P_ResumenImpuestos.Exferia_DataGridView_Repercutidos.Rows.Clear();

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_Rellenar_DataGrid_Repercutidos.RunWorkerAsync();
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(Rellenar_DataGrid_Repercutidos));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Repercutidos_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_FILTRADO = null;

                if (g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo != null && g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.Count > 0)
                {
                    //Filtros Avanzados
                    if (g_dct_ListadoFiltros_Repercutidos != null && g_dct_ListadoFiltros_Repercutidos.Count > 0)
                    {
                        g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_FILTRADO = g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.AsQueryable().Where(Funciones_Lambda.Formar_EmpresionLambda_Filtrado<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo>(g_dct_ListadoFiltros_Repercutidos, g_obj_ABS_Listado_ResumenImpuestos_Repercutidos)).ToList();
                    }
                    else
                    {
                        g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_FILTRADO = g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.AsQueryable().ToList();
                    }

                    if (g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_FILTRADO != null && g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_FILTRADO.Count > 0)
                    {
                        int int_ContadorFila = 0;
                        //AGRUPACION POR IMPUESTO CABECERA
                        foreach (var obj_ImpuestoCabecera in g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_FILTRADO.OrderBy(m => m.ImpuestoCabecera).GroupBy(x => new { x.ImpuestoCabecera_Id, x.ImpuestoCabecera }).Select(g => g.Key).ToList())
                        {
                            //Se Cancelo la tarea asincrona #########################
                            if (((BackgroundWorker)sender).CancellationPending)
                            {
                                e.Cancel = true;
                                return;
                            }
                            //Añadir al DataGridView
                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Repercutidos_ImpuestoCabecera(obj_ImpuestoCabecera.ImpuestoCabecera));
                            //Esperar un poco
                            Thread.Sleep(1);
                            int_ContadorFila += 1;

                            //AGRUPACION POR DELEGACION
                            foreach (var obj_Delegacion in g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_FILTRADO.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id).OrderBy(m => m.Delegacion).GroupBy(x => new { x.Delegacion_Id, x.Delegacion }).Select(g => g.Key).ToList())
                            {
                                //Se Cancelo la tarea asincrona #########################
                                if (((BackgroundWorker)sender).CancellationPending)
                                {
                                    e.Cancel = true;
                                    return;
                                }
                                //Añadir al DataGridView
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Repercutidos_Delegacion(obj_Delegacion.Delegacion));
                                //Esperar un poco
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                long lng_idFacturaCompra = -1;
                                foreach (INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo in g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_FILTRADO.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id && m.Delegacion_Id == obj_Delegacion.Delegacion_Id).OrderBy(m => m.NumeroDocumento))
                                {
                                    //Se Cancelo la tarea asincrona #########################
                                    if (((BackgroundWorker)sender).CancellationPending)
                                    {
                                        e.Cancel = true;
                                        return;
                                    }

                                    INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO = new INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo();
                                    Funciones.CopiarPropiedadesObjetos(mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo, mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO, false, false);

                                    //Si la FacturaCompraCambia no se vacian los datos de la cabecera
                                    if (lng_idFacturaCompra == mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO.id)
                                    {
                                        mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO.NumeroFactura = -1;
                                        mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO.Fecha = null;
                                        mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO.Cliente_RazonSocial = "";
                                        mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO.Cliente_CIF = "";
                                        mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO.estado_Vaciado = true;
                                        mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO.Boton_Ver = "";
                                    }
                                    else
                                    {
                                        mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO.Boton_Ver = "Ver";
                                    }

                                    //Añadir al DataGridView
                                    ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Repercutidos(mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO, int_ContadorFila));

                                    int_ContadorFila += 1;
                                    lng_idFacturaCompra = mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NUEVO.id;

                                    //Esperar un poco
                                    Thread.Sleep(1);
                                }
                            }
                        }
                    }
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Repercutidos_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (!g_frm_P_ResumenImpuestos.IsDisposed && e.ProgressPercentage == 1)
                {
                    DataGridViewRow dgrv_Fila = (DataGridViewRow)e.UserState;
                    g_frm_P_ResumenImpuestos.Exferia_DataGridView_Repercutidos.Rows.Add(dgrv_Fila);
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Repercutidos_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        public DataGridViewRow Transformar_Modelo_A_Row_Repercutidos_ImpuestoCabecera(string _str_ImpuestoCabecera)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Repercutidos.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Repercutidos);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Repercutido_Columnas)
            {
                //Si es Impuesto
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.ImpuestoCabecera))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_ImpuestoCabecera;
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Repercutidos_Delegacion(string _str_Delegacion)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Repercutidos.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Repercutidos);


            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Repercutido_Columnas)
            {
                //Si es Delegacion
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.Delegacion))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Delegacion;
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Repercutidos(INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo _mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo, int _int_ContadorFila)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Repercutidos.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Repercutidos);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Repercutido_Columnas)
            {
                //Que no sea ni impuestocabecera ni delegacion
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna != nameof(INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.ImpuestoCabecera) &&
                    mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna != nameof(INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.Delegacion))
                {
                    //Segun el Tipo
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                    {
                        DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Repercutido_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_ResumenImpuestos_Repercutido_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Repercutido_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_ResumenImpuestos_Repercutido_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Repercutido_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_ResumenImpuestos_Repercutido_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Repercutido_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_ResumenImpuestos_Repercutido_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Repercutido_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_ResumenImpuestos_Repercutido_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Repercutido_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_ResumenImpuestos_Repercutido_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo, null);
                    }
                }

                int_ContadorFila += 1;
            }


            //Si es de Estado Abierto se cambio el color de la fila
            if (_mdl_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.estado == Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO)
            {
                if ((_int_ContadorFila % 2) == 0)
                {
                    obj_DataGridViewRow.DefaultCellStyle.BackColor = Colores.G_COLOR_FONDO_RESUMENIMPUESTOS_ESTADOABIERTO;
                    obj_DataGridViewRow.DefaultCellStyle.ForeColor = Colores.G_COLOR_LETRA_RESUMENIMPUESTOS_ESTADOABIERTO;
                }
                else
                {
                    obj_DataGridViewRow.DefaultCellStyle.BackColor = Colores.G_COLOR_FONDO_RESUMENIMPUESTOS_ESTADOABIERTO_ALTERNATIVO;
                    obj_DataGridViewRow.DefaultCellStyle.ForeColor = Colores.G_COLOR_LETRA_RESUMENIMPUESTOS_ESTADOABIERTO_ALTERNATIVO;
                }
            }

            return obj_DataGridViewRow;
        }
        #endregion

        #region Rellenar DataGrid Resumen
        public void Rellenar_DataGrid_Resumen()
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Resumen != null)
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Resumen.CancelAsync();
                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Resumen.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Resumen = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Resumen.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Resumen_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Resumen.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Resumen_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Resumen.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Resumen_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Resumen.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Resumen.WorkerSupportsCancellation = true;
                }
                //Vaciar el Listado
                g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.Rows.Clear();
                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo = null;

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_Rellenar_DataGrid_Resumen.RunWorkerAsync();
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(Rellenar_DataGrid_Resumen));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Resumen_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo = new List<INTERNO_ResumenImpuestos_Listado_Modelo>();

                int int_ContadorFila = 0;
                decimal? dcm_Nulo = null;

                #region Soportados
                decimal dcm_SumaSoportado_Impuesto_BaseImponible = 0m;
                decimal dcm_SumaSoportado_Impuesto_Impuesto = 0m;
                decimal dcm_SumaSoportado_Impuesto_BaseRecargo = 0m;
                decimal dcm_SumaSoportado_Impuesto_Recargo = 0m;
                decimal dcm_SumaSoportado_Impuesto_TotalImpuestos = 0m;
                decimal dcm_SumaSoportado_Impuesto_TotalFinal = 0m;

                if (g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo!=null && g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.Count>0)
                {
                    //Tipo de Resumen
                    ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Tipo(g_str_Titulos_TipoResumen_Soportado, int_ContadorFila));
                    Thread.Sleep(1);
                    int_ContadorFila += 1;

                    #region PARA EXCEL
                    INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO = new INTERNO_ResumenImpuestos_Listado_Modelo();
                    //TipoLineaParaInforme
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.TipoLineaParaInforme = g_str_TipoLinea_Soportado_Tipo;
                    //Tipo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Tipo = g_str_Titulos_TipoResumen_Soportado;
                    //ImpuestoCabecera_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.ImpuestoCabecera_Id = -1;
                    //ImpuestoCabecera_Codigo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.ImpuestoCabecera_Codigo = "";
                    //ImpuestoCabecera_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.ImpuestoCabecera_Descripcion = "";
                    //Delegacion_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Delegacion_Id = -1;
                    //Delegacion_Codigo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Delegacion_Codigo = "";
                    //Delegacion_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Delegacion_Descripcion = "";
                    //Naturaleza
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Naturaleza = "";
                    //ImpuestoTipo_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.ImpuestoTipo_Id = -1;
                    //ImpuestoTipo_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.ImpuestoTipo_Descripcion = "";
                    //BaseImponible
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.BaseImponible = null;
                    //Impuesto_Porcentaje
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Impuesto_Porcentaje = null;
                    //Impuesto_Valor
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Impuesto_Valor = null;
                    //BaseRecargo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.BaseRecargo = null;
                    //Recargo_Porcentaje
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Recargo_Porcentaje = null;
                    //Recargo_Valor
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Recargo_Valor = null;
                    //Total_Impuestos
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Total_Impuestos = null;
                    //Total_Final
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Total_Final = null;

                    g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO);
                    #endregion

                    //AGRUPACION POR IMPUESTO CABECERA
                    foreach (var obj_ImpuestoCabecera in g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.OrderBy(m => m.ImpuestoCabecera).GroupBy(x => new { x.ImpuestoCabecera_Id, x.ImpuestoCabecera,x.ImpuestoCabecera_Codigo,x.ImpuestoCabecera_Descripcion }).Select(g => g.Key).ToList())
                    {
                        //Se Cancelo la tarea asincrona #########################
                        if (((BackgroundWorker)sender).CancellationPending)
                        {
                            e.Cancel = true;
                            return;
                        }

                        //Agregar linea
                        ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_ImpuestoCabecera(obj_ImpuestoCabecera.ImpuestoCabecera, int_ContadorFila));
                        Thread.Sleep(1);
                        int_ContadorFila += 1;

                        #region PARA EXCEL
                        INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                        //TipoLineaParaInforme
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.TipoLineaParaInforme = g_str_TipoLinea_Soportado_Impuesto;
                        //Tipo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Tipo = "";
                        //ImpuestoCabecera_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.ImpuestoCabecera_Id = obj_ImpuestoCabecera.ImpuestoCabecera_Id;
                        //ImpuestoCabecera_Codigo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.ImpuestoCabecera_Codigo = obj_ImpuestoCabecera.ImpuestoCabecera_Codigo;
                        //ImpuestoCabecera_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.ImpuestoCabecera_Descripcion = obj_ImpuestoCabecera.ImpuestoCabecera_Descripcion;
                        //Delegacion_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Delegacion_Id = -1;
                        //Delegacion_Codigo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Delegacion_Codigo = "";
                        //Delegacion_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Delegacion_Descripcion = "";
                        //Naturaleza
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Naturaleza = "";
                        //ImpuestoTipo_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.ImpuestoTipo_Id = -1;
                        //ImpuestoTipo_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.ImpuestoTipo_Descripcion = "";
                        //BaseImponible
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.BaseImponible = null;
                        //Impuesto_Porcentaje
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Impuesto_Porcentaje = null;
                        //Impuesto_Valor
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Impuesto_Valor = null;
                        //BaseRecargo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.BaseRecargo = null;
                        //Recargo_Porcentaje
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Recargo_Porcentaje = null;
                        //Recargo_Valor
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Recargo_Valor = null;
                        //Total_Impuestos
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Total_Impuestos = null;
                        //Total_Final
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Total_Final = null;

                        g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA);
                        #endregion

                        //AGRUPACION POR DELEGACION
                        decimal dcm_SumaTablaImpuestos_Impuesto_BaseImponible = 0m;
                        decimal dcm_SumaTablaImpuestos_Impuesto_Impuesto = 0m;
                        decimal dcm_SumaTablaImpuestos_Impuesto_BaseRecargo = 0m;
                        decimal dcm_SumaTablaImpuestos_Impuesto_Recargo = 0m;
                        decimal dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos = 0m;
                        decimal dcm_SumaTablaImpuestos_Impuesto_TotalFinal = 0m;
                        foreach (var obj_Delegacion in g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id).OrderBy(m => m.Delegacion).GroupBy(x => new { x.Delegacion_Id, x.Delegacion, x.Delegacion_Codigo,x.Delegacion_Descripcion }).Select(g => g.Key).ToList())
                        {
                            //Se Cancelo la tarea asincrona #########################
                            if (((BackgroundWorker)sender).CancellationPending)
                            {
                                e.Cancel = true;
                                return;
                            }

                            //Agregar linea
                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Delegacion(obj_Delegacion.Delegacion, int_ContadorFila));
                            Thread.Sleep(1);
                            int_ContadorFila += 1;

                            #region PARA EXCEL
                            INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION = new INTERNO_ResumenImpuestos_Listado_Modelo();
                            //TipoLineaParaInforme
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.TipoLineaParaInforme = g_str_TipoLinea_Soportado_Delegacion;
                            //Tipo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Tipo = "";
                            //ImpuestoCabecera_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.ImpuestoCabecera_Id = -1;
                            //ImpuestoCabecera_Codigo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.ImpuestoCabecera_Codigo = "";
                            //ImpuestoCabecera_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.ImpuestoCabecera_Descripcion = "";
                            //Delegacion_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Delegacion_Id = obj_Delegacion.Delegacion_Id;
                            //Delegacion_Codigo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Delegacion_Codigo = obj_Delegacion.Delegacion_Codigo;
                            //Delegacion_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Delegacion_Descripcion = obj_Delegacion.Delegacion_Descripcion;
                            //Naturaleza
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Naturaleza = "";
                            //ImpuestoTipo_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.ImpuestoTipo_Id = -1;
                            //ImpuestoTipo_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.ImpuestoTipo_Descripcion = "";
                            //BaseImponible
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.BaseImponible = null;
                            //Impuesto_Porcentaje
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Impuesto_Porcentaje = null;
                            //Impuesto_Valor
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Impuesto_Valor = null;
                            //BaseRecargo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.BaseRecargo = null;
                            //Recargo_Porcentaje
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Recargo_Porcentaje = null;
                            //Recargo_Valor
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Recargo_Valor = null;
                            //Total_Impuestos
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Total_Impuestos = null;
                            //Total_Final
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Total_Final = null;

                            g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION);
                            #endregion

                            #region IMPUESTOS

                            //Filtrar el listado
                            List<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NOEXENTOSPOSITIVOS_FILTRADO = g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id && m.Delegacion_Id == obj_Delegacion.Delegacion_Id && m.Impuesto_Porcentaje>0m && m.BaseImponible>0m).ToList();
                            decimal dcm_SumaNaturaleza_Impuesto_BaseImponible = 0m;
                            decimal dcm_SumaNaturaleza_Impuesto_Impuesto = 0m;
                            decimal dcm_SumaNaturaleza_Impuesto_BaseRecargo = 0m;
                            decimal dcm_SumaNaturaleza_Impuesto_Recargo = 0m;
                            decimal dcm_SumaNaturaleza_Impuesto_TotalImpuestos = 0m;
                            decimal dcm_SumaNaturaleza_Impuesto_TotalFinal = 0m;
                            if (lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NOEXENTOSPOSITIVOS_FILTRADO != null && lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NOEXENTOSPOSITIVOS_FILTRADO.Count > 0)
                            {
                                //Agregar linea
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Naturaleza(g_str_Titulos_Naturaleza_Impuestos, int_ContadorFila));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Soportado_Naturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Naturaleza = g_str_Titulos_Naturaleza_Impuestos;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseImponible = null;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseRecargo = null;
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Valor = null;
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Final = null;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA);
                                #endregion

                                //Agregar Cabecera
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Cabecera( g_str_Titulos_Cabecera_TipoImpuestos,
                                                                                                                        g_str_Titulos_Cabecera_BaseImponible,
                                                                                                                        g_str_Titulos_Cabecera_ImpuestoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Impuesto ,
                                                                                                                        g_str_Titulos_Cabecera_BaseRecargo ,
                                                                                                                        g_str_Titulos_Cabecera_RecargoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Recargo ,
                                                                                                                        g_str_Titulos_Cabecera_TotalImpuesto,
                                                                                                                        g_str_Titulos_Cabecera_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;
                                
                                //AGRUPACION POR IMPUESTO PORCENTAJE
                                foreach (var obj_ImpuestoTipo in lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NOEXENTOSPOSITIVOS_FILTRADO.OrderBy(m => m.Impuesto_Porcentaje).GroupBy(x => new {x.ImpuestoTipo_Id,x.ImpuestoTipo_Descripcion}).Select(g => g.Key).ToList())
                                {
                                    //Para Suma
                                    List<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NOEXENTOSPOSITIVOS_FILTRADO.Where(m => m.ImpuestoTipo_Id == obj_ImpuestoTipo.ImpuestoTipo_Id).ToList();
                                    if (lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA != null && lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.Count > 0)
                                    {
                                        decimal? dcm_BaseImponible_Total= lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.Sum(m => m.BaseImponible);

                                        if (dcm_BaseImponible_Total != null && dcm_BaseImponible_Total.Value != 0m)
                                        {
                                            //Calculo Impuesto
                                            decimal dcm_Porcentaje_Impuesto = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.FirstOrDefault(m => m.Impuesto_Porcentaje != 0).Impuesto_Porcentaje;
                                            decimal dcm_Impuesto_Caculado = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.Sum(m => m.Impuesto_Valor);

                                            //Recargo
                                            decimal dcm_Base_Recargo = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.Where(m=>m.Recargo_Valor!=0m).Sum(m => m.BaseImponible);
                                            decimal dcm_Porcentaje_Recargo = 0m;
                                            decimal dcm_Recargo_Caculado = 0m;
                                            if (dcm_Base_Recargo!=0m)
                                            {
                                                dcm_Porcentaje_Recargo = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.FirstOrDefault(m => m.Recargo_Porcentaje != 0).Recargo_Porcentaje;
                                                dcm_Recargo_Caculado = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.Sum(m => m.Recargo_Valor);
                                            }

                                            //Rellenar modelo
                                            INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo = new INTERNO_ResumenImpuestos_Listado_Modelo();

                                            //Tipo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Tipo = "";
                                            //ImpuestoCabecera_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Id = -1;
                                            //ImpuestoCabecera_Codigo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Codigo = "";
                                            //ImpuestoCabecera_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Descripcion = "";
                                            //Delegacion_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Id = -1;
                                            //Delegacion_Codigo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Codigo = "";
                                            //Delegacion_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Descripcion = "";
                                            //Naturaleza
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Naturaleza = "";
                                            //ImpuestoTipo_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Id = obj_ImpuestoTipo.ImpuestoTipo_Id;
                                            //ImpuestoTipo_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Descripcion = obj_ImpuestoTipo.ImpuestoTipo_Descripcion;
                                            //BaseImponible
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible = dcm_BaseImponible_Total.Value;
                                            //Impuesto_Porcentaje
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Porcentaje = dcm_Porcentaje_Impuesto;
                                            //Impuesto_Valor
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor = dcm_Impuesto_Caculado;
                                            //BaseRecargo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo = dcm_Recargo_Caculado != 0 ? dcm_Base_Recargo : dcm_Nulo;
                                            //Recargo_Porcentaje
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Porcentaje = dcm_Recargo_Caculado != 0 ? dcm_Porcentaje_Recargo : dcm_Nulo;
                                            //Recargo_Valor
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor = dcm_Recargo_Caculado != 0 ? dcm_Recargo_Caculado : dcm_Nulo;
                                            //Total_Impuestos
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos = dcm_Impuesto_Caculado + dcm_Recargo_Caculado;
                                            //Total_Final
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final = dcm_BaseImponible_Total.Value + (dcm_Impuesto_Caculado + dcm_Recargo_Caculado);

                                            //Añadir al DataGridView
                                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen(mdl_INTERNO_ResumenImpuestos_Listado_Modelo, int_ContadorFila));
                                            int_ContadorFila += 1;

                                            dcm_SumaNaturaleza_Impuesto_BaseImponible += dcm_BaseImponible_Total.Value;
                                            dcm_SumaNaturaleza_Impuesto_Impuesto += dcm_Impuesto_Caculado;
                                            dcm_SumaNaturaleza_Impuesto_BaseRecargo += dcm_Base_Recargo;
                                            dcm_SumaNaturaleza_Impuesto_Recargo += dcm_Recargo_Caculado;
                                            dcm_SumaNaturaleza_Impuesto_TotalImpuestos += (dcm_Impuesto_Caculado + dcm_Recargo_Caculado);
                                            dcm_SumaNaturaleza_Impuesto_TotalFinal += dcm_BaseImponible_Total.Value + (dcm_Impuesto_Caculado + dcm_Recargo_Caculado);

                                            #region Para Excel
                                            //TipoLineaParaInforme
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.TipoLineaParaInforme = g_str_TipoLinea_Soportado_Lineas;
                                            g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo);
                                            #endregion
                                        }
                                    }
                                }

                                //Agregar linea Suma tipo impuestos
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaNaturaleza(g_str_Titulos_Suma_TipoImpuestos, 
                                                                                                                            dcm_SumaNaturaleza_Impuesto_BaseImponible,
                                                                                                                            (dcm_SumaNaturaleza_Impuesto_Impuesto != 0m ? dcm_SumaNaturaleza_Impuesto_Impuesto : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Impuesto_BaseRecargo != 0m ? dcm_SumaNaturaleza_Impuesto_BaseRecargo : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Impuesto_Recargo != 0m ? dcm_SumaNaturaleza_Impuesto_Recargo : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Impuesto_TotalImpuestos != 0m ? dcm_SumaNaturaleza_Impuesto_TotalImpuestos : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Impuesto_TotalFinal != 0m ? dcm_SumaNaturaleza_Impuesto_TotalFinal : dcm_Nulo)));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Soportado_SumaNaturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Naturaleza = g_str_Titulos_Suma_TipoImpuestos;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseImponible = dcm_SumaNaturaleza_Impuesto_BaseImponible;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Valor = (dcm_SumaNaturaleza_Impuesto_Impuesto != 0m ? dcm_SumaNaturaleza_Impuesto_Impuesto : dcm_Nulo);
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseRecargo = (dcm_SumaNaturaleza_Impuesto_BaseRecargo != 0m ? dcm_SumaNaturaleza_Impuesto_BaseRecargo : dcm_Nulo);
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Valor = (dcm_SumaNaturaleza_Impuesto_Recargo != 0m ? dcm_SumaNaturaleza_Impuesto_Recargo : dcm_Nulo);
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Impuestos = (dcm_SumaNaturaleza_Impuesto_TotalImpuestos != 0m ? dcm_SumaNaturaleza_Impuesto_TotalImpuestos : dcm_Nulo);
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Final = (dcm_SumaNaturaleza_Impuesto_TotalFinal) != 0m ? dcm_SumaNaturaleza_Impuesto_TotalFinal : dcm_Nulo;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA);
                                #endregion
                            }
                            #endregion

                            #region EXENTO
                            //Filtrar el listado
                            List<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_EXENTO_POSITIVOS_FILTRADO = g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id && m.Delegacion_Id == obj_Delegacion.Delegacion_Id && m.Impuesto_Porcentaje == 0m && m.BaseImponible > 0m).ToList();
                            decimal dcm_SumaNaturaleza_Exento_BaseImponible = 0m;
                            decimal dcm_SumaNaturaleza_Exento_BaseRecargo = 0m;
                            decimal dcm_SumaNaturaleza_Exento_TotalFinal = 0m;
                            if (lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_EXENTO_POSITIVOS_FILTRADO != null && lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_EXENTO_POSITIVOS_FILTRADO.Count > 0)
                            {
                                //Agregar linea
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Naturaleza(g_str_Titulos_Naturaleza_Exento, int_ContadorFila));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Soportado_Naturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Naturaleza = g_str_Titulos_Naturaleza_Exento;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseImponible = null;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseRecargo = null;
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Valor = null;
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Final = null;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA);
                                #endregion

                                //Agregar Cabecera
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Cabecera(g_str_Titulos_Cabecera_TipoImpuestos,
                                                                                                                        g_str_Titulos_Cabecera_BaseImponible,
                                                                                                                        g_str_Titulos_Cabecera_ImpuestoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Impuesto,
                                                                                                                        g_str_Titulos_Cabecera_BaseRecargo,
                                                                                                                        g_str_Titulos_Cabecera_RecargoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Recargo,
                                                                                                                        g_str_Titulos_Cabecera_TotalImpuesto,
                                                                                                                        g_str_Titulos_Cabecera_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                decimal? dcm_BaseImponible_Total = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_EXENTO_POSITIVOS_FILTRADO.Sum(m => m.BaseImponible);

                                if (dcm_BaseImponible_Total != null && dcm_BaseImponible_Total.Value != 0m)
                                {                              
                                    //Recargo
                                    decimal dcm_Base_Recargo = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_EXENTO_POSITIVOS_FILTRADO.Where(m => m.Recargo_Valor != 0m).Sum(m => m.BaseImponible);
                                    
                                    //Rellenar modelo
                                    INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo = new INTERNO_ResumenImpuestos_Listado_Modelo();

                                    //Tipo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Tipo = "";
                                    //ImpuestoCabecera_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Id = -1;
                                    //ImpuestoCabecera_Codigo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Codigo = "";
                                    //ImpuestoCabecera_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Descripcion = "";
                                    //Delegacion_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Id = -1;
                                    //Delegacion_Codigo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Codigo = "";
                                    //Delegacion_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Descripcion = "";
                                    //Naturaleza
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Naturaleza = "EXENTO";
                                    //ImpuestoTipo_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Id = -1;
                                    //ImpuestoTipo_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Descripcion = "";
                                    //BaseImponible
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible = dcm_BaseImponible_Total.Value;
                                    //Impuesto_Porcentaje
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Porcentaje = dcm_Nulo;
                                    //Impuesto_Valor
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor = dcm_Nulo;
                                    //BaseRecargo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo = dcm_Base_Recargo!=0m? dcm_Base_Recargo : dcm_Nulo;
                                    //Recargo_Porcentaje
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Porcentaje = dcm_Nulo;
                                    //Recargo_Valor
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor = dcm_Nulo;
                                    //Total_Impuestos
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos = dcm_Nulo;
                                    //Total_Final
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final = dcm_BaseImponible_Total.Value;

                                    //Añadir al DataGridView
                                    ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen(mdl_INTERNO_ResumenImpuestos_Listado_Modelo, int_ContadorFila));
                                    int_ContadorFila += 1;

                                    dcm_SumaNaturaleza_Exento_BaseImponible += dcm_BaseImponible_Total.Value;
                                    dcm_SumaNaturaleza_Exento_BaseRecargo += dcm_Base_Recargo;
                                    dcm_SumaNaturaleza_Exento_TotalFinal += dcm_BaseImponible_Total.Value;

                                    #region Para Excel
                                    //TipoLineaParaInforme
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.TipoLineaParaInforme = g_str_TipoLinea_Soportado_Lineas;
                                    g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo);
                                    #endregion
                                }

                                //Agregar linea Suma tipo impuestos
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaNaturaleza(g_str_Titulos_Suma_TipoImpuestos, 
                                                                                                                            dcm_SumaNaturaleza_Exento_BaseImponible, 
                                                                                                                            dcm_Nulo, 
                                                                                                                            (dcm_SumaNaturaleza_Exento_BaseRecargo!=0m ? dcm_SumaNaturaleza_Exento_BaseRecargo : dcm_Nulo),
                                                                                                                            dcm_Nulo,
                                                                                                                            dcm_Nulo,
                                                                                                                            dcm_SumaNaturaleza_Exento_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Soportado_SumaNaturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Naturaleza = g_str_Titulos_Suma_TipoImpuestos;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseImponible = dcm_SumaNaturaleza_Exento_BaseImponible;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseRecargo = (dcm_SumaNaturaleza_Exento_BaseRecargo != 0m ? dcm_SumaNaturaleza_Exento_BaseRecargo : dcm_Nulo);
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Valor = (dcm_SumaNaturaleza_Impuesto_Recargo != 0m ? dcm_SumaNaturaleza_Impuesto_Recargo : dcm_Nulo);
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Final = dcm_SumaNaturaleza_Exento_TotalFinal;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA);
                                #endregion
                            }
                            #endregion

                            #region NEGATIVAS
                            //Filtrar el listado
                            List<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NOEXENTOSNEGATIVAS_FILTRADO = g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id && m.Delegacion_Id == obj_Delegacion.Delegacion_Id && m.Impuesto_Porcentaje > 0m && m.BaseImponible < 0m).ToList();
                            decimal dcm_SumaNaturaleza_Negativas_BaseImponible = 0m;
                            decimal dcm_SumaNaturaleza_Negativas_Impuesto = 0m;
                            decimal dcm_SumaNaturaleza_Negativas_BaseRecargo = 0m;
                            decimal dcm_SumaNaturaleza_Negativas_Recargo = 0m;
                            decimal dcm_SumaNaturaleza_Negativas_TotalImpuestos = 0m;
                            decimal dcm_SumaNaturaleza_Negativas_TotalFinal = 0m;
                            if (lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NOEXENTOSNEGATIVAS_FILTRADO != null && lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NOEXENTOSNEGATIVAS_FILTRADO.Count > 0)
                            {
                                //Agregar linea
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Naturaleza(g_str_Titulos_Naturaleza_Negativas, int_ContadorFila));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Soportado_Naturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Naturaleza = g_str_Titulos_Naturaleza_Negativas;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseImponible = null;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseRecargo = null;
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Valor = null;
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Final = null;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA);
                                #endregion

                                //Agregar Cabecera
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Cabecera(g_str_Titulos_Cabecera_TipoImpuestos,
                                                                                                                        g_str_Titulos_Cabecera_BaseImponible,
                                                                                                                        g_str_Titulos_Cabecera_ImpuestoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Impuesto,
                                                                                                                        g_str_Titulos_Cabecera_BaseRecargo,
                                                                                                                        g_str_Titulos_Cabecera_RecargoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Recargo,
                                                                                                                        g_str_Titulos_Cabecera_TotalImpuesto,
                                                                                                                        g_str_Titulos_Cabecera_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                //AGRUPACION POR IMPUESTO PORCENTAJE
                                foreach (var obj_ImpuestoTipo in lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NOEXENTOSNEGATIVAS_FILTRADO.OrderBy(m => m.Impuesto_Porcentaje).GroupBy(x => new { x.ImpuestoTipo_Id, x.ImpuestoTipo_Descripcion }).Select(g => g.Key).ToList())
                                {
                                    //Para Suma
                                    List<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_NOEXENTOSNEGATIVAS_FILTRADO.Where(m => m.ImpuestoTipo_Id == obj_ImpuestoTipo.ImpuestoTipo_Id).ToList();
                                    if (lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA != null && lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.Count > 0)
                                    {
                                        decimal? dcm_BaseImponible_Total = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.Sum(m => m.BaseImponible);

                                        if (dcm_BaseImponible_Total != null && dcm_BaseImponible_Total.Value != 0m)
                                        {
                                            //Calculo Impuesto
                                            decimal dcm_Porcentaje_Impuesto = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.FirstOrDefault(m => m.Impuesto_Porcentaje != 0).Impuesto_Porcentaje;
                                            decimal dcm_Impuesto_Caculado = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.Sum(m => m.Impuesto_Valor);

                                            //Recargo
                                            decimal dcm_Base_Recargo = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.Where(m => m.Recargo_Valor != 0m).Sum(m => m.BaseImponible);
                                            decimal dcm_Porcentaje_Recargo = 0m;
                                            decimal dcm_Recargo_Caculado = 0m;
                                            if (dcm_Base_Recargo != 0m)
                                            {
                                                dcm_Porcentaje_Recargo = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.FirstOrDefault(m => m.Recargo_Porcentaje != 0).Recargo_Porcentaje;
                                                dcm_Recargo_Caculado = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_PARASUMA.Sum(m => m.Recargo_Valor);
                                            }

                                            //Rellenar modelo
                                            INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo = new INTERNO_ResumenImpuestos_Listado_Modelo();

                                            //Tipo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Tipo = "";
                                            //ImpuestoCabecera_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Id = -1;
                                            //ImpuestoCabecera_Codigo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Codigo = "";
                                            //ImpuestoCabecera_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Descripcion = "";
                                            //Delegacion_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Id = -1;
                                            //Delegacion_Codigo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Codigo = "";
                                            //Delegacion_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Descripcion = "";
                                            //Naturaleza
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Naturaleza = "NEGATIVAS";
                                            //ImpuestoTipo_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Id = obj_ImpuestoTipo.ImpuestoTipo_Id;
                                            //ImpuestoTipo_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Descripcion = obj_ImpuestoTipo.ImpuestoTipo_Descripcion;
                                            //BaseImponible
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible = dcm_BaseImponible_Total.Value;
                                            //Impuesto_Porcentaje
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Porcentaje = dcm_Porcentaje_Impuesto;
                                            //Impuesto_Valor
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor = dcm_Impuesto_Caculado;
                                            //BaseRecargo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo = dcm_Recargo_Caculado != 0 ? dcm_Base_Recargo : dcm_Nulo;
                                            //Recargo_Porcentaje
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Porcentaje = dcm_Recargo_Caculado != 0 ? dcm_Porcentaje_Recargo : dcm_Nulo;
                                            //Recargo_Valor
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor = dcm_Recargo_Caculado != 0 ? dcm_Recargo_Caculado : dcm_Nulo;
                                            //Total_Impuestos
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos = dcm_Impuesto_Caculado + dcm_Recargo_Caculado;
                                            //Total_Final
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final = dcm_BaseImponible_Total.Value+(dcm_Impuesto_Caculado + dcm_Recargo_Caculado);

                                            //Añadir al DataGridView
                                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen(mdl_INTERNO_ResumenImpuestos_Listado_Modelo, int_ContadorFila));
                                            int_ContadorFila += 1;

                                            dcm_SumaNaturaleza_Negativas_BaseImponible += dcm_BaseImponible_Total.Value;
                                            dcm_SumaNaturaleza_Negativas_Impuesto += dcm_Impuesto_Caculado;
                                            dcm_SumaNaturaleza_Negativas_BaseRecargo += dcm_Base_Recargo;
                                            dcm_SumaNaturaleza_Negativas_Recargo += dcm_Recargo_Caculado;
                                            dcm_SumaNaturaleza_Negativas_TotalImpuestos += (dcm_Impuesto_Caculado + dcm_Recargo_Caculado);
                                            dcm_SumaNaturaleza_Negativas_TotalFinal += (dcm_BaseImponible_Total.Value + dcm_Impuesto_Caculado + dcm_Recargo_Caculado);

                                            #region Para Excel
                                            //TipoLineaParaInforme
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.TipoLineaParaInforme = g_str_TipoLinea_Soportado_Lineas;
                                            g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo);
                                            #endregion
                                        }
                                    }
                                }

                                //Agregar linea Suma tipo impuestos
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaNaturaleza(g_str_Titulos_Suma_TipoImpuestos, 
                                                                                                                            dcm_SumaNaturaleza_Negativas_BaseImponible, 
                                                                                                                            (dcm_SumaNaturaleza_Negativas_Impuesto!=0 ? dcm_SumaNaturaleza_Negativas_Impuesto : dcm_Nulo), 
                                                                                                                            (dcm_SumaNaturaleza_Negativas_BaseRecargo != 0 ? dcm_SumaNaturaleza_Negativas_BaseRecargo : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Negativas_Recargo != 0 ? dcm_SumaNaturaleza_Negativas_Recargo : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Negativas_TotalImpuestos != 0 ? dcm_SumaNaturaleza_Negativas_TotalImpuestos : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Negativas_TotalFinal != 0 ? dcm_SumaNaturaleza_Negativas_TotalFinal : dcm_Nulo)));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Soportado_SumaNaturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Naturaleza = g_str_Titulos_Suma_TipoImpuestos;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseImponible = dcm_SumaNaturaleza_Negativas_BaseImponible;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Valor = (dcm_SumaNaturaleza_Negativas_Impuesto != 0 ? dcm_SumaNaturaleza_Negativas_Impuesto : dcm_Nulo);
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseRecargo = (dcm_SumaNaturaleza_Negativas_BaseRecargo != 0 ? dcm_SumaNaturaleza_Negativas_BaseRecargo : dcm_Nulo);
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Valor = (dcm_SumaNaturaleza_Negativas_Recargo != 0 ? dcm_SumaNaturaleza_Negativas_Recargo : dcm_Nulo);
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Impuestos = (dcm_SumaNaturaleza_Negativas_TotalImpuestos != 0 ? dcm_SumaNaturaleza_Negativas_TotalImpuestos : dcm_Nulo);
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Final = (dcm_SumaNaturaleza_Negativas_TotalFinal) != 0 ? (dcm_SumaNaturaleza_Negativas_TotalFinal) : dcm_Nulo;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA);
                                #endregion
                            }
                            #endregion

                            #region EXENTO-NEGATIVAS
                            //Filtrar el listado
                            List<INTERNO_ResumenImpuestos_Soportado_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_EXENTO_NEGATIVAS_FILTRADO = g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id && m.Delegacion_Id == obj_Delegacion.Delegacion_Id && m.Impuesto_Porcentaje == 0m && m.BaseImponible < 0m).ToList();
                            decimal dcm_SumaNaturaleza_ExentoNegativas_BaseImponible = 0m;
                            decimal dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo = 0m;
                            decimal dcm_SumaNaturaleza_ExentoNegativas_TotalFinal = 0m;
                            if (lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_EXENTO_NEGATIVAS_FILTRADO != null && lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_EXENTO_NEGATIVAS_FILTRADO.Count > 0)
                            {
                                //Agregar linea
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Naturaleza(g_str_Titulos_Naturaleza_ExentoNegativas, int_ContadorFila));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Soportado_Naturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Naturaleza = g_str_Titulos_Naturaleza_ExentoNegativas;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseImponible = null;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseRecargo = null;
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Valor = null;
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Final = null;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA);
                                #endregion

                                //Agregar Cabecera
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Cabecera(g_str_Titulos_Cabecera_TipoImpuestos,
                                                                                                                        g_str_Titulos_Cabecera_BaseImponible,
                                                                                                                        g_str_Titulos_Cabecera_ImpuestoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Impuesto,
                                                                                                                        g_str_Titulos_Cabecera_BaseRecargo,
                                                                                                                        g_str_Titulos_Cabecera_RecargoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Recargo,
                                                                                                                        g_str_Titulos_Cabecera_TotalImpuesto,
                                                                                                                        g_str_Titulos_Cabecera_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                decimal? dcm_BaseImponible_Total = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_EXENTO_NEGATIVAS_FILTRADO.Sum(m => m.BaseImponible);

                                if (dcm_BaseImponible_Total != null && dcm_BaseImponible_Total.Value != 0m)
                                {
                                    //Recargo
                                    decimal dcm_Base_Recargo = lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo_EXENTO_NEGATIVAS_FILTRADO.Where(m => m.Recargo_Valor != 0m).Sum(m => m.BaseImponible);

                                    //Rellenar modelo
                                    INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo = new INTERNO_ResumenImpuestos_Listado_Modelo();

                                    //Tipo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Tipo = "";
                                    //ImpuestoCabecera_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Id = -1;
                                    //ImpuestoCabecera_Codigo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Codigo = "";
                                    //ImpuestoCabecera_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Descripcion = "";
                                    //Delegacion_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Id = -1;
                                    //Delegacion_Codigo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Codigo = "";
                                    //Delegacion_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Descripcion = "";
                                    //Naturaleza
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Naturaleza = "EXENTO-NEGATIVAS";
                                    //ImpuestoTipo_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Id = -1;
                                    //ImpuestoTipo_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Descripcion = "";
                                    //BaseImponible
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible = dcm_BaseImponible_Total.Value;
                                    //Impuesto_Porcentaje
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Porcentaje = dcm_Nulo;
                                    //Impuesto_Valor
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor = dcm_Nulo;
                                    //BaseRecargo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo = dcm_Base_Recargo != 0m ? dcm_Base_Recargo : dcm_Nulo;
                                    //Recargo_Porcentaje
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Porcentaje = dcm_Nulo;
                                    //Recargo_Valor
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor = dcm_Nulo;
                                    //Total_Impuestos
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos = dcm_Nulo;
                                    //Total_Final
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final = dcm_BaseImponible_Total.Value;

                                    //Añadir al DataGridView
                                    ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen(mdl_INTERNO_ResumenImpuestos_Listado_Modelo, int_ContadorFila));
                                    int_ContadorFila += 1;

                                    dcm_SumaNaturaleza_ExentoNegativas_BaseImponible += dcm_BaseImponible_Total.Value;
                                    dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo += dcm_Base_Recargo;
                                    dcm_SumaNaturaleza_ExentoNegativas_TotalFinal += dcm_BaseImponible_Total.Value;
                                    #region Para Excel
                                    //TipoLineaParaInforme
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.TipoLineaParaInforme = g_str_TipoLinea_Soportado_Lineas;
                                    g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo);
                                    #endregion
                                }

                                //Agregar linea Suma tipo impuestos
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaNaturaleza(g_str_Titulos_Suma_TipoImpuestos,
                                                                                                                            dcm_SumaNaturaleza_ExentoNegativas_BaseImponible,
                                                                                                                            dcm_Nulo, 
                                                                                                                            (dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo!=0m? dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo : dcm_Nulo),
                                                                                                                            dcm_Nulo,
                                                                                                                            dcm_Nulo,
                                                                                                                            dcm_SumaNaturaleza_ExentoNegativas_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Soportado_SumaNaturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Naturaleza = g_str_Titulos_Suma_TipoImpuestos;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseImponible = dcm_SumaNaturaleza_ExentoNegativas_BaseImponible;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseRecargo = (dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo != 0m ? dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo : dcm_Nulo);
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Valor = null;
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Final = dcm_SumaNaturaleza_ExentoNegativas_TotalFinal;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA);
                                #endregion
                            }

                            #endregion

                            //Agregar linea Suma delegacion Actual
                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaDelegacion(g_str_Titulos_Suma_Delegacion + " " + obj_Delegacion.Delegacion_Codigo,
                                                                                                                    dcm_SumaNaturaleza_Impuesto_BaseImponible + dcm_SumaNaturaleza_Exento_BaseImponible + dcm_SumaNaturaleza_Negativas_BaseImponible + dcm_SumaNaturaleza_ExentoNegativas_BaseImponible,
                                                                                                                    ((dcm_SumaNaturaleza_Impuesto_Impuesto + dcm_SumaNaturaleza_Negativas_Impuesto) != 0m ? (dcm_SumaNaturaleza_Impuesto_Impuesto + dcm_SumaNaturaleza_Negativas_Impuesto) : dcm_Nulo),
                                                                                                                    ((dcm_SumaNaturaleza_Impuesto_BaseRecargo + dcm_SumaNaturaleza_Exento_BaseRecargo + dcm_SumaNaturaleza_Negativas_BaseRecargo + dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo) != 0m ? (dcm_SumaNaturaleza_Impuesto_BaseRecargo + dcm_SumaNaturaleza_Exento_BaseRecargo + dcm_SumaNaturaleza_Negativas_BaseRecargo + dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo) : dcm_Nulo),
                                                                                                                    ((dcm_SumaNaturaleza_Impuesto_Recargo + dcm_SumaNaturaleza_Negativas_Recargo) != 0m ? (dcm_SumaNaturaleza_Impuesto_Recargo + dcm_SumaNaturaleza_Negativas_Recargo) : dcm_Nulo),
                                                                                                                    ((dcm_SumaNaturaleza_Impuesto_TotalImpuestos + dcm_SumaNaturaleza_Negativas_TotalImpuestos) != 0m ? (dcm_SumaNaturaleza_Impuesto_TotalImpuestos + dcm_SumaNaturaleza_Negativas_TotalImpuestos) : dcm_Nulo),
                                                                                                                    ((dcm_SumaNaturaleza_Impuesto_TotalFinal + dcm_SumaNaturaleza_Exento_TotalFinal + dcm_SumaNaturaleza_Negativas_TotalFinal + dcm_SumaNaturaleza_ExentoNegativas_TotalFinal) != 0m ? (dcm_SumaNaturaleza_Impuesto_TotalFinal + dcm_SumaNaturaleza_Exento_TotalFinal + dcm_SumaNaturaleza_Negativas_TotalFinal + dcm_SumaNaturaleza_ExentoNegativas_TotalFinal) : dcm_Nulo)));


                            dcm_SumaTablaImpuestos_Impuesto_BaseImponible += (dcm_SumaNaturaleza_Impuesto_BaseImponible+ dcm_SumaNaturaleza_Exento_BaseImponible+ dcm_SumaNaturaleza_Negativas_BaseImponible+ dcm_SumaNaturaleza_ExentoNegativas_BaseImponible);
                            dcm_SumaTablaImpuestos_Impuesto_Impuesto += (dcm_SumaNaturaleza_Impuesto_Impuesto+ dcm_SumaNaturaleza_Negativas_Impuesto);
                            dcm_SumaTablaImpuestos_Impuesto_BaseRecargo += (dcm_SumaNaturaleza_Impuesto_BaseRecargo+ dcm_SumaNaturaleza_Exento_BaseRecargo+ dcm_SumaNaturaleza_Negativas_BaseRecargo+ dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo);
                            dcm_SumaTablaImpuestos_Impuesto_Recargo += (dcm_SumaNaturaleza_Impuesto_Recargo+ dcm_SumaNaturaleza_Negativas_Recargo);
                            dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos += (dcm_SumaNaturaleza_Impuesto_TotalImpuestos+ dcm_SumaNaturaleza_Negativas_TotalImpuestos);
                            dcm_SumaTablaImpuestos_Impuesto_TotalFinal += (dcm_SumaNaturaleza_Impuesto_TotalFinal + dcm_SumaNaturaleza_Exento_TotalFinal + dcm_SumaNaturaleza_Negativas_TotalFinal + dcm_SumaNaturaleza_ExentoNegativas_TotalFinal);

                            #region PARA EXCEL
                            INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION = new INTERNO_ResumenImpuestos_Listado_Modelo();
                            //TipoLineaParaInforme
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.TipoLineaParaInforme = g_str_TipoLinea_Soportado_SumaDelegacion;
                            //Tipo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Tipo = "";
                            //ImpuestoCabecera_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.ImpuestoCabecera_Id = -1;
                            //ImpuestoCabecera_Codigo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.ImpuestoCabecera_Codigo = "";
                            //ImpuestoCabecera_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.ImpuestoCabecera_Descripcion = "";
                            //Delegacion_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Delegacion_Id = -1;
                            //Delegacion_Codigo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Delegacion_Codigo = "";
                            //Delegacion_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Delegacion_Descripcion = g_str_Titulos_Suma_Delegacion + " " + obj_Delegacion.Delegacion_Codigo;
                            //Naturaleza
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Naturaleza = "";
                            //ImpuestoTipo_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.ImpuestoTipo_Id = -1;
                            //ImpuestoTipo_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.ImpuestoTipo_Descripcion = "";
                            //BaseImponible
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.BaseImponible = dcm_SumaNaturaleza_Impuesto_BaseImponible + dcm_SumaNaturaleza_Exento_BaseImponible + dcm_SumaNaturaleza_Negativas_BaseImponible + dcm_SumaNaturaleza_ExentoNegativas_BaseImponible;
                            //Impuesto_Porcentaje
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Impuesto_Porcentaje = null;
                            //Impuesto_Valor
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Impuesto_Valor = ((dcm_SumaNaturaleza_Impuesto_Impuesto + dcm_SumaNaturaleza_Negativas_Impuesto) != 0m ? (dcm_SumaNaturaleza_Impuesto_Impuesto + dcm_SumaNaturaleza_Negativas_Impuesto) : dcm_Nulo);
                            //BaseRecargo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.BaseRecargo = ((dcm_SumaNaturaleza_Impuesto_BaseRecargo + dcm_SumaNaturaleza_Exento_BaseRecargo + dcm_SumaNaturaleza_Negativas_BaseRecargo + dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo) != 0m ? (dcm_SumaNaturaleza_Impuesto_BaseRecargo + dcm_SumaNaturaleza_Exento_BaseRecargo + dcm_SumaNaturaleza_Negativas_BaseRecargo + dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo) : dcm_Nulo);
                            //Recargo_Porcentaje
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Recargo_Porcentaje = null;
                            //Recargo_Valor
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Recargo_Valor = ((dcm_SumaNaturaleza_Impuesto_Recargo + dcm_SumaNaturaleza_Negativas_Recargo) != 0m ? (dcm_SumaNaturaleza_Impuesto_Recargo + dcm_SumaNaturaleza_Negativas_Recargo) : dcm_Nulo);
                            //Total_Impuestos
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Total_Impuestos = ((dcm_SumaNaturaleza_Impuesto_TotalImpuestos + dcm_SumaNaturaleza_Negativas_TotalImpuestos) != 0m ? (dcm_SumaNaturaleza_Impuesto_TotalImpuestos + dcm_SumaNaturaleza_Negativas_TotalImpuestos) : dcm_Nulo);
                            //Total_Final
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Total_Final = ((dcm_SumaNaturaleza_Impuesto_TotalFinal + dcm_SumaNaturaleza_Exento_TotalFinal + dcm_SumaNaturaleza_Negativas_TotalFinal + dcm_SumaNaturaleza_ExentoNegativas_TotalFinal) != 0m ? (dcm_SumaNaturaleza_Impuesto_TotalFinal + dcm_SumaNaturaleza_Exento_TotalFinal + dcm_SumaNaturaleza_Negativas_TotalFinal + dcm_SumaNaturaleza_ExentoNegativas_TotalFinal) : dcm_Nulo);

                            g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION);
                            #endregion
                        }

                        //Agregar linea Suma delegacion
                        ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaTablaImpuestos(g_str_Titulos_Suma_TablaImpuestos + " " + obj_ImpuestoCabecera.ImpuestoCabecera_Codigo,
                                                                                                                        dcm_SumaTablaImpuestos_Impuesto_BaseImponible,
                                                                                                                        (dcm_SumaTablaImpuestos_Impuesto_Impuesto != 0m ? dcm_SumaTablaImpuestos_Impuesto_Impuesto : dcm_Nulo),
                                                                                                                        (dcm_SumaTablaImpuestos_Impuesto_BaseRecargo != 0m ? dcm_SumaTablaImpuestos_Impuesto_BaseRecargo : dcm_Nulo),
                                                                                                                        (dcm_SumaTablaImpuestos_Impuesto_Recargo != 0m ? dcm_SumaTablaImpuestos_Impuesto_Recargo : dcm_Nulo),
                                                                                                                        (dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos != 0m ? dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos : dcm_Nulo),
                                                                                                                        (dcm_SumaTablaImpuestos_Impuesto_TotalFinal != 0m ? dcm_SumaTablaImpuestos_Impuesto_TotalFinal : dcm_Nulo)));
                        Thread.Sleep(1);
                        int_ContadorFila += 1;

                        dcm_SumaSoportado_Impuesto_BaseImponible += dcm_SumaTablaImpuestos_Impuesto_BaseImponible;
                        dcm_SumaSoportado_Impuesto_Impuesto += dcm_SumaTablaImpuestos_Impuesto_Impuesto;
                        dcm_SumaSoportado_Impuesto_BaseRecargo += dcm_SumaTablaImpuestos_Impuesto_BaseRecargo;
                        dcm_SumaSoportado_Impuesto_Recargo += dcm_SumaTablaImpuestos_Impuesto_Recargo;
                        dcm_SumaSoportado_Impuesto_TotalImpuestos += dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos;
                        dcm_SumaSoportado_Impuesto_TotalFinal += dcm_SumaTablaImpuestos_Impuesto_TotalFinal;

                        #region PARA EXCEL
                        INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS = new INTERNO_ResumenImpuestos_Listado_Modelo();
                        //TipoLineaParaInforme
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.TipoLineaParaInforme = g_str_TipoLinea_Soportado_SumaTablaImpuestos;
                        //Tipo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Tipo = "";
                        //ImpuestoCabecera_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.ImpuestoCabecera_Id = -1;
                        //ImpuestoCabecera_Codigo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.ImpuestoCabecera_Codigo = "";
                        //ImpuestoCabecera_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.ImpuestoCabecera_Descripcion = g_str_Titulos_Suma_TablaImpuestos + " " + obj_ImpuestoCabecera.ImpuestoCabecera_Codigo;
                        //Delegacion_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Delegacion_Id = -1;
                        //Delegacion_Codigo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Delegacion_Codigo = "";
                        //Delegacion_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Delegacion_Descripcion = "";
                        //Naturaleza
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Naturaleza = "";
                        //ImpuestoTipo_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.ImpuestoTipo_Id = -1;
                        //ImpuestoTipo_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.ImpuestoTipo_Descripcion = "";
                        //BaseImponible
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.BaseImponible = dcm_SumaTablaImpuestos_Impuesto_BaseImponible;
                        //Impuesto_Porcentaje
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Impuesto_Porcentaje = null;
                        //Impuesto_Valor
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Impuesto_Valor = (dcm_SumaTablaImpuestos_Impuesto_Impuesto != 0m ? dcm_SumaTablaImpuestos_Impuesto_Impuesto : dcm_Nulo);
                        //BaseRecargo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.BaseRecargo = (dcm_SumaTablaImpuestos_Impuesto_BaseRecargo != 0m ? dcm_SumaTablaImpuestos_Impuesto_BaseRecargo : dcm_Nulo);
                        //Recargo_Porcentaje
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Recargo_Porcentaje = null;
                        //Recargo_Valor
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Recargo_Valor = (dcm_SumaTablaImpuestos_Impuesto_Recargo != 0m ? dcm_SumaTablaImpuestos_Impuesto_Recargo : dcm_Nulo);
                        //Total_Impuestos
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Total_Impuestos = (dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos != 0m ? dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos : dcm_Nulo);
                        //Total_Final
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Total_Final = (dcm_SumaTablaImpuestos_Impuesto_TotalFinal != 0m ? dcm_SumaTablaImpuestos_Impuesto_TotalFinal : dcm_Nulo);

                        g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS);
                        #endregion
                    }

                    //Agregar linea Suma impuestos
                     ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaSoportados(g_str_Titulos_Suma_Soportados,
                                                                                                                dcm_SumaSoportado_Impuesto_BaseImponible,
                                                                                                                (dcm_SumaSoportado_Impuesto_Impuesto != 0m ? dcm_SumaSoportado_Impuesto_Impuesto : dcm_Nulo),
                                                                                                                (dcm_SumaSoportado_Impuesto_BaseRecargo != 0m ? dcm_SumaSoportado_Impuesto_BaseRecargo : dcm_Nulo),
                                                                                                                (dcm_SumaSoportado_Impuesto_Recargo != 0m ? dcm_SumaSoportado_Impuesto_Recargo : dcm_Nulo),
                                                                                                                (dcm_SumaSoportado_Impuesto_TotalImpuestos != 0m ? dcm_SumaSoportado_Impuesto_TotalImpuestos : dcm_Nulo),
                                                                                                                (dcm_SumaSoportado_Impuesto_TotalFinal != 0m ? dcm_SumaSoportado_Impuesto_TotalFinal : dcm_Nulo)));
                    Thread.Sleep(1);
                    int_ContadorFila += 1;

                    #region PARA EXCEL
                    INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO = new INTERNO_ResumenImpuestos_Listado_Modelo();
                    //TipoLineaParaInforme
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.TipoLineaParaInforme = g_str_TipoLinea_Soportado_SumaTipo;
                    //Tipo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.Tipo = g_str_Titulos_Suma_Soportados;
                    //ImpuestoCabecera_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.ImpuestoCabecera_Id = -1;
                    //ImpuestoCabecera_Codigo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.ImpuestoCabecera_Codigo = "";
                    //ImpuestoCabecera_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.ImpuestoCabecera_Descripcion = "";
                    //Delegacion_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.Delegacion_Id = -1;
                    //Delegacion_Codigo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.Delegacion_Codigo = "";
                    //Delegacion_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.Delegacion_Descripcion = "";
                    //Naturaleza
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.Naturaleza = "";
                    //ImpuestoTipo_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.ImpuestoTipo_Id = -1;
                    //ImpuestoTipo_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.ImpuestoTipo_Descripcion = "";
                    //BaseImponible
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.BaseImponible = dcm_SumaSoportado_Impuesto_BaseImponible;
                    //Impuesto_Porcentaje
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.Impuesto_Porcentaje = null;
                    //Impuesto_Valor
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.Impuesto_Valor = (dcm_SumaSoportado_Impuesto_Impuesto != 0m ? dcm_SumaSoportado_Impuesto_Impuesto : dcm_Nulo);
                    //BaseRecargo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.BaseRecargo = (dcm_SumaSoportado_Impuesto_BaseRecargo != 0m ? dcm_SumaSoportado_Impuesto_BaseRecargo : dcm_Nulo);
                    //Recargo_Porcentaje
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.Recargo_Porcentaje = null;
                    //Recargo_Valor
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.Recargo_Valor = (dcm_SumaSoportado_Impuesto_Recargo != 0m ? dcm_SumaSoportado_Impuesto_Recargo : dcm_Nulo);
                    //Total_Impuestos
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.Total_Impuestos = (dcm_SumaSoportado_Impuesto_TotalImpuestos != 0m ? dcm_SumaSoportado_Impuesto_TotalImpuestos : dcm_Nulo);
                    //Total_Final
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO.Total_Final = (dcm_SumaSoportado_Impuesto_TotalFinal != 0m ? dcm_SumaSoportado_Impuesto_TotalFinal : dcm_Nulo);

                    g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMASOPORTADO);
                    #endregion
                }
                #endregion

                #region Repercutidos
                decimal dcm_SumaRepercutidos_Impuesto_BaseImponible = 0m;
                decimal dcm_SumaRepercutidos_Impuesto_Impuesto = 0m;
                decimal dcm_SumaRepercutidos_Impuesto_BaseRecargo = 0m;
                decimal dcm_SumaRepercutidos_Impuesto_Recargo = 0m;
                decimal dcm_SumaRepercutidos_Impuesto_TotalImpuestos = 0m;
                decimal dcm_SumaRepercutidos_Impuesto_TotalFinal = 0m;
                if (g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo != null && g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.Count > 0)
                {
                    //Tipo de Resumen
                    ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Tipo(g_str_Titulos_TipoResumen_Repercutido, int_ContadorFila));
                    Thread.Sleep(1);
                    int_ContadorFila += 1;

                    #region PARA EXCEL
                    INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO = new INTERNO_ResumenImpuestos_Listado_Modelo();
                    //TipoLineaParaInforme
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_Tipo;
                    //Tipo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Tipo = g_str_Titulos_TipoResumen_Repercutido;
                    //ImpuestoCabecera_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.ImpuestoCabecera_Id = -1;
                    //ImpuestoCabecera_Codigo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.ImpuestoCabecera_Codigo = "";
                    //ImpuestoCabecera_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.ImpuestoCabecera_Descripcion = "";
                    //Delegacion_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Delegacion_Id = -1;
                    //Delegacion_Codigo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Delegacion_Codigo = "";
                    //Delegacion_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Delegacion_Descripcion = "";
                    //Naturaleza
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Naturaleza = "";
                    //ImpuestoTipo_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.ImpuestoTipo_Id = -1;
                    //ImpuestoTipo_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.ImpuestoTipo_Descripcion = "";
                    //BaseImponible
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.BaseImponible = null;
                    //Impuesto_Porcentaje
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Impuesto_Porcentaje = null;
                    //Impuesto_Valor
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Impuesto_Valor = null;
                    //BaseRecargo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.BaseRecargo = null;
                    //Recargo_Porcentaje
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Recargo_Porcentaje = null;
                    //Recargo_Valor
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Recargo_Valor = null;
                    //Total_Impuestos
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Total_Impuestos = null;
                    //Total_Final
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO.Total_Final = null;

                    g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_TIPO);
                    #endregion

                    //AGRUPACION POR IMPUESTO CABECERA
                    foreach (var obj_ImpuestoCabecera in g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.OrderBy(m => m.ImpuestoCabecera).GroupBy(x => new { x.ImpuestoCabecera_Id, x.ImpuestoCabecera,x.ImpuestoCabecera_Codigo,x.ImpuestoCabecera_Descripcion }).Select(g => g.Key).ToList())
                    {
                        //Se Cancelo la tarea asincrona #########################
                        if (((BackgroundWorker)sender).CancellationPending)
                        {
                            e.Cancel = true;
                            return;
                        }

                        //Agregar linea
                        ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_ImpuestoCabecera(obj_ImpuestoCabecera.ImpuestoCabecera, int_ContadorFila));
                        Thread.Sleep(1);
                        int_ContadorFila += 1;

                        #region PARA EXCEL
                        INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                        //TipoLineaParaInforme
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_Impuesto;
                        //Tipo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Tipo = "";
                        //ImpuestoCabecera_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.ImpuestoCabecera_Id = obj_ImpuestoCabecera.ImpuestoCabecera_Id;
                        //ImpuestoCabecera_Codigo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.ImpuestoCabecera_Codigo = obj_ImpuestoCabecera.ImpuestoCabecera_Codigo;
                        //ImpuestoCabecera_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.ImpuestoCabecera_Descripcion = obj_ImpuestoCabecera.ImpuestoCabecera_Descripcion;
                        //Delegacion_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Delegacion_Id = -1;
                        //Delegacion_Codigo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Delegacion_Codigo = "";
                        //Delegacion_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Delegacion_Descripcion = "";
                        //Naturaleza
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Naturaleza = "";
                        //ImpuestoTipo_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.ImpuestoTipo_Id = -1;
                        //ImpuestoTipo_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.ImpuestoTipo_Descripcion = "";
                        //BaseImponible
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.BaseImponible = null;
                        //Impuesto_Porcentaje
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Impuesto_Porcentaje = null;
                        //Impuesto_Valor
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Impuesto_Valor = null;
                        //BaseRecargo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.BaseRecargo = null;
                        //Recargo_Porcentaje
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Recargo_Porcentaje = null;
                        //Recargo_Valor
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Recargo_Valor = null;
                        //Total_Impuestos
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Total_Impuestos = null;
                        //Total_Final
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA.Total_Final = null;

                        g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_IMPUESTOCABECERA);
                        #endregion

                        //AGRUPACION POR DELEGACION
                        decimal dcm_SumaTablaImpuestos_Impuesto_BaseImponible = 0m;
                        decimal dcm_SumaTablaImpuestos_Impuesto_Impuesto = 0m;
                        decimal dcm_SumaTablaImpuestos_Impuesto_BaseRecargo = 0m;
                        decimal dcm_SumaTablaImpuestos_Impuesto_Recargo = 0m;
                        decimal dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos = 0m;
                        decimal dcm_SumaTablaImpuestos_Impuesto_TotalFinal = 0m;
                        foreach (var obj_Delegacion in g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id).OrderBy(m => m.Delegacion).GroupBy(x => new { x.Delegacion_Id, x.Delegacion,x.Delegacion_Codigo,x.Delegacion_Descripcion }).Select(g => g.Key).ToList())
                        {
                            //Se Cancelo la tarea asincrona #########################
                            if (((BackgroundWorker)sender).CancellationPending)
                            {
                                e.Cancel = true;
                                return;
                            }

                            //Agregar linea
                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Delegacion(obj_Delegacion.Delegacion, int_ContadorFila));
                            Thread.Sleep(1);
                            int_ContadorFila += 1;

                            #region PARA EXCEL
                            INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION = new INTERNO_ResumenImpuestos_Listado_Modelo();
                            //TipoLineaParaInforme
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_Delegacion;
                            //Tipo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Tipo = "";
                            //ImpuestoCabecera_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.ImpuestoCabecera_Id = -1;
                            //ImpuestoCabecera_Codigo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.ImpuestoCabecera_Codigo = "";
                            //ImpuestoCabecera_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.ImpuestoCabecera_Descripcion = "";
                            //Delegacion_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Delegacion_Id = obj_Delegacion.Delegacion_Id;
                            //Delegacion_Codigo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Delegacion_Codigo = obj_Delegacion.Delegacion_Codigo;
                            //Delegacion_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Delegacion_Descripcion = obj_Delegacion.Delegacion_Descripcion;
                            //Naturaleza
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Naturaleza = "";
                            //ImpuestoTipo_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.ImpuestoTipo_Id = -1;
                            //ImpuestoTipo_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.ImpuestoTipo_Descripcion = "";
                            //BaseImponible
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.BaseImponible = null;
                            //Impuesto_Porcentaje
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Impuesto_Porcentaje = null;
                            //Impuesto_Valor
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Impuesto_Valor = null;
                            //BaseRecargo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.BaseRecargo = null;
                            //Recargo_Porcentaje
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Recargo_Porcentaje = null;
                            //Recargo_Valor
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Recargo_Valor = null;
                            //Total_Impuestos
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Total_Impuestos = null;
                            //Total_Final
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION.Total_Final = null;

                            g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_DELEGACION);
                            #endregion

                            #region IMPUESTOS

                            //Filtrar el listado
                            List<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NOEXENTOSPOSITIVOS_FILTRADO = g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id && m.Delegacion_Id == obj_Delegacion.Delegacion_Id && m.Impuesto_Porcentaje > 0m && m.BaseImponible > 0m).ToList();
                            decimal dcm_SumaNaturaleza_Impuesto_BaseImponible = 0m;
                            decimal dcm_SumaNaturaleza_Impuesto_Impuesto = 0m;
                            decimal dcm_SumaNaturaleza_Impuesto_BaseRecargo = 0m;
                            decimal dcm_SumaNaturaleza_Impuesto_Recargo = 0m;
                            decimal dcm_SumaNaturaleza_Impuesto_TotalImpuestos = 0m;
                            decimal dcm_SumaNaturaleza_Impuesto_TotalFinal = 0m;
                            if (lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NOEXENTOSPOSITIVOS_FILTRADO != null && lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NOEXENTOSPOSITIVOS_FILTRADO.Count > 0)
                            {
                                //Agregar linea
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Naturaleza(g_str_Titulos_Naturaleza_Impuestos, int_ContadorFila));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_Naturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Naturaleza = g_str_Titulos_Naturaleza_Impuestos;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseImponible = null;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseRecargo = null;
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Valor = null;
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Final = null;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA);
                                #endregion

                                //Agregar Cabecera
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Cabecera(g_str_Titulos_Cabecera_TipoImpuestos,
                                                                                                                        g_str_Titulos_Cabecera_BaseImponible,
                                                                                                                        g_str_Titulos_Cabecera_ImpuestoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Impuesto,
                                                                                                                        g_str_Titulos_Cabecera_BaseRecargo,
                                                                                                                        g_str_Titulos_Cabecera_RecargoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Recargo,
                                                                                                                        g_str_Titulos_Cabecera_TotalImpuesto,
                                                                                                                        g_str_Titulos_Cabecera_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                //AGRUPACION POR IMPUESTO PORCENTAJE
                                foreach (var obj_ImpuestoTipo in lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NOEXENTOSPOSITIVOS_FILTRADO.OrderBy(m => m.Impuesto_Porcentaje).GroupBy(x => new { x.ImpuestoTipo_Id, x.ImpuestoTipo_Descripcion }).Select(g => g.Key).ToList())
                                {
                                    //Para Suma
                                    List<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NOEXENTOSPOSITIVOS_FILTRADO.Where(m => m.ImpuestoTipo_Id == obj_ImpuestoTipo.ImpuestoTipo_Id).ToList();
                                    if (lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA != null && lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.Count > 0)
                                    {
                                        decimal? dcm_BaseImponible_Total = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.Sum(m => m.BaseImponible);

                                        if (dcm_BaseImponible_Total != null && dcm_BaseImponible_Total.Value != 0m)
                                        {
                                            //Calculo Impuesto
                                            decimal dcm_Porcentaje_Impuesto = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.FirstOrDefault(m => m.Impuesto_Porcentaje != 0).Impuesto_Porcentaje;
                                            decimal dcm_Impuesto_Caculado = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.Sum(m => m.Impuesto_Valor);

                                            //Recargo
                                            decimal dcm_Base_Recargo = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.Where(m => m.Recargo_Valor != 0m).Sum(m => m.BaseImponible);
                                            decimal dcm_Porcentaje_Recargo = 0m;
                                            decimal dcm_Recargo_Caculado = 0m;
                                            if (dcm_Base_Recargo != 0m)
                                            {
                                                dcm_Porcentaje_Recargo = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.FirstOrDefault(m => m.Recargo_Porcentaje != 0).Recargo_Porcentaje;
                                                dcm_Recargo_Caculado = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.Sum(m => m.Recargo_Valor);
                                            }

                                            //Rellenar modelo
                                            INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo = new INTERNO_ResumenImpuestos_Listado_Modelo();

                                            //Tipo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Tipo = "";
                                            //ImpuestoCabecera_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Id = -1;
                                            //ImpuestoCabecera_Codigo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Codigo = "";
                                            //ImpuestoCabecera_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Descripcion = "";
                                            //Delegacion_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Id = -1;
                                            //Delegacion_Codigo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Codigo = "";
                                            //Delegacion_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Descripcion = "";
                                            //Naturaleza
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Naturaleza = "";
                                            //ImpuestoTipo_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Id = obj_ImpuestoTipo.ImpuestoTipo_Id;
                                            //ImpuestoTipo_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Descripcion = obj_ImpuestoTipo.ImpuestoTipo_Descripcion;
                                            //BaseImponible
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible = dcm_BaseImponible_Total.Value;
                                            //Impuesto_Porcentaje
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Porcentaje = dcm_Porcentaje_Impuesto;
                                            //Impuesto_Valor
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor = dcm_Impuesto_Caculado;
                                            //BaseRecargo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo = dcm_Recargo_Caculado != 0 ? dcm_Base_Recargo : dcm_Nulo;
                                            //Recargo_Porcentaje
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Porcentaje = dcm_Recargo_Caculado != 0 ? dcm_Porcentaje_Recargo : dcm_Nulo;
                                            //Recargo_Valor
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor = dcm_Recargo_Caculado != 0 ? dcm_Recargo_Caculado : dcm_Nulo;
                                            //Total_Impuestos
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos = dcm_Impuesto_Caculado + dcm_Recargo_Caculado;
                                            //Total_Final
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final = dcm_BaseImponible_Total.Value + dcm_Impuesto_Caculado + dcm_Recargo_Caculado;

                                            //Añadir al DataGridView
                                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen(mdl_INTERNO_ResumenImpuestos_Listado_Modelo, int_ContadorFila));
                                            int_ContadorFila += 1;

                                            dcm_SumaNaturaleza_Impuesto_BaseImponible += dcm_BaseImponible_Total.Value;
                                            dcm_SumaNaturaleza_Impuesto_Impuesto += dcm_Impuesto_Caculado;
                                            dcm_SumaNaturaleza_Impuesto_BaseRecargo += dcm_Base_Recargo;
                                            dcm_SumaNaturaleza_Impuesto_Recargo += dcm_Recargo_Caculado;
                                            dcm_SumaNaturaleza_Impuesto_TotalImpuestos += (dcm_Impuesto_Caculado + dcm_Recargo_Caculado);
                                            dcm_SumaNaturaleza_Impuesto_TotalFinal += (dcm_BaseImponible_Total.Value + dcm_Impuesto_Caculado + dcm_Recargo_Caculado);

                                            #region Para Excel
                                            //TipoLineaParaInforme
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_Lineas;
                                            g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo);
                                            #endregion
                                        }
                                    }
                                }

                                //Agregar linea Suma tipo impuestos
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaNaturaleza(g_str_Titulos_Suma_TipoImpuestos,
                                                                                                                            dcm_SumaNaturaleza_Impuesto_BaseImponible,
                                                                                                                            (dcm_SumaNaturaleza_Impuesto_Impuesto != 0m ? dcm_SumaNaturaleza_Impuesto_Impuesto : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Impuesto_BaseRecargo != 0m ? dcm_SumaNaturaleza_Impuesto_BaseRecargo : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Impuesto_Recargo != 0m ? dcm_SumaNaturaleza_Impuesto_Recargo : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Impuesto_TotalImpuestos != 0m ? dcm_SumaNaturaleza_Impuesto_TotalImpuestos : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Impuesto_TotalFinal != 0m ? dcm_SumaNaturaleza_Impuesto_TotalFinal : dcm_Nulo)));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_SumaNaturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Naturaleza = g_str_Titulos_Suma_TipoImpuestos;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseImponible = dcm_SumaNaturaleza_Impuesto_BaseImponible;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Valor = (dcm_SumaNaturaleza_Impuesto_Impuesto != 0m ? dcm_SumaNaturaleza_Impuesto_Impuesto : dcm_Nulo);
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseRecargo = (dcm_SumaNaturaleza_Impuesto_BaseRecargo != 0m ? dcm_SumaNaturaleza_Impuesto_BaseRecargo : dcm_Nulo);
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Valor = (dcm_SumaNaturaleza_Impuesto_Recargo != 0m ? dcm_SumaNaturaleza_Impuesto_Recargo : dcm_Nulo);
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Impuestos = (dcm_SumaNaturaleza_Impuesto_TotalImpuestos != 0m ? dcm_SumaNaturaleza_Impuesto_TotalImpuestos : dcm_Nulo);
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Final = (dcm_SumaNaturaleza_Impuesto_TotalFinal != 0m ? dcm_SumaNaturaleza_Impuesto_TotalFinal : dcm_Nulo);

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA);
                                #endregion
                            }
                            #endregion

                            #region EXENTO
                            //Filtrar el listado
                            List<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_EXENTO_POSITIVOS_FILTRADO = g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id && m.Delegacion_Id == obj_Delegacion.Delegacion_Id && m.Impuesto_Porcentaje == 0m && m.BaseImponible > 0m).ToList();
                            decimal dcm_SumaNaturaleza_Exento_BaseImponible = 0m;
                            decimal dcm_SumaNaturaleza_Exento_BaseRecargo = 0m;
                            decimal dcm_SumaNaturaleza_Exento_TotalFinal = 0m;
                            if (lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_EXENTO_POSITIVOS_FILTRADO != null && lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_EXENTO_POSITIVOS_FILTRADO.Count > 0)
                            {
                                //Agregar linea
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Naturaleza(g_str_Titulos_Naturaleza_Exento, int_ContadorFila));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_Naturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Naturaleza = g_str_Titulos_Naturaleza_Exento;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseImponible = null;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseRecargo = null;
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Valor = null;
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Final = null;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA);
                                #endregion

                                //Agregar Cabecera
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Cabecera(g_str_Titulos_Cabecera_TipoImpuestos,
                                                                                                                        g_str_Titulos_Cabecera_BaseImponible,
                                                                                                                        g_str_Titulos_Cabecera_ImpuestoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Impuesto,
                                                                                                                        g_str_Titulos_Cabecera_BaseRecargo,
                                                                                                                        g_str_Titulos_Cabecera_RecargoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Recargo,
                                                                                                                        g_str_Titulos_Cabecera_TotalImpuesto,
                                                                                                                        g_str_Titulos_Cabecera_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                decimal? dcm_BaseImponible_Total = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_EXENTO_POSITIVOS_FILTRADO.Sum(m => m.BaseImponible);

                                if (dcm_BaseImponible_Total != null && dcm_BaseImponible_Total.Value != 0m)
                                {
                                    //Recargo
                                    decimal dcm_Base_Recargo = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_EXENTO_POSITIVOS_FILTRADO.Where(m => m.Recargo_Valor != 0m).Sum(m => m.BaseImponible);

                                    //Rellenar modelo
                                    INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo = new INTERNO_ResumenImpuestos_Listado_Modelo();

                                    //Tipo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Tipo = "";
                                    //ImpuestoCabecera_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Id = -1;
                                    //ImpuestoCabecera_Codigo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Codigo = "";
                                    //ImpuestoCabecera_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Descripcion = "";
                                    //Delegacion_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Id = -1;
                                    //Delegacion_Codigo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Codigo = "";
                                    //Delegacion_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Descripcion = "";
                                    //Naturaleza
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Naturaleza = "";
                                    //ImpuestoTipo_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Id = -1;
                                    //ImpuestoTipo_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Descripcion = "";
                                    //BaseImponible
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible = dcm_BaseImponible_Total.Value;
                                    //Impuesto_Porcentaje
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Porcentaje = dcm_Nulo;
                                    //Impuesto_Valor
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor = dcm_Nulo;
                                    //BaseRecargo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo = dcm_Base_Recargo != 0m ? dcm_Base_Recargo : dcm_Nulo;
                                    //Recargo_Porcentaje
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Porcentaje = dcm_Nulo;
                                    //Recargo_Valor
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor = dcm_Nulo;
                                    //Total_Impuestos
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos = dcm_Nulo;
                                    //Total_Final
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final = dcm_BaseImponible_Total.Value;

                                    //Añadir al DataGridView
                                    ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen(mdl_INTERNO_ResumenImpuestos_Listado_Modelo, int_ContadorFila));
                                    int_ContadorFila += 1;

                                    dcm_SumaNaturaleza_Exento_BaseImponible += dcm_BaseImponible_Total.Value;
                                    dcm_SumaNaturaleza_Exento_BaseRecargo += dcm_Base_Recargo;
                                    dcm_SumaNaturaleza_Exento_TotalFinal += dcm_BaseImponible_Total.Value;
                                    #region Para Excel
                                    //TipoLineaParaInforme
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_Lineas;
                                    g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo);
                                    #endregion
                                }

                                //Agregar linea Suma tipo impuestos
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaNaturaleza(g_str_Titulos_Suma_TipoImpuestos,
                                                                                                                            dcm_SumaNaturaleza_Exento_BaseImponible,
                                                                                                                            dcm_Nulo,
                                                                                                                            (dcm_SumaNaturaleza_Exento_BaseRecargo != 0m ? dcm_SumaNaturaleza_Exento_BaseRecargo : dcm_Nulo),
                                                                                                                            dcm_Nulo,
                                                                                                                            dcm_Nulo,
                                                                                                                            dcm_SumaNaturaleza_Exento_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;


                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_SumaNaturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Naturaleza = g_str_Titulos_Suma_TipoImpuestos;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseImponible = dcm_SumaNaturaleza_Exento_BaseImponible;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseRecargo = (dcm_SumaNaturaleza_Exento_BaseRecargo != 0m ? dcm_SumaNaturaleza_Exento_BaseRecargo : dcm_Nulo);
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Valor = (dcm_SumaNaturaleza_Impuesto_Recargo != 0m ? dcm_SumaNaturaleza_Impuesto_Recargo : dcm_Nulo);
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Final = dcm_SumaNaturaleza_Exento_TotalFinal;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA);
                                #endregion
                            }
                            #endregion

                            #region NEGATIVAS
                            //Filtrar el listado
                            List<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NOEXENTOSNEGATIVAS_FILTRADO = g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id && m.Delegacion_Id == obj_Delegacion.Delegacion_Id && m.Impuesto_Porcentaje > 0m && m.BaseImponible < 0m).ToList();
                            decimal dcm_SumaNaturaleza_Negativas_BaseImponible = 0m;
                            decimal dcm_SumaNaturaleza_Negativas_Impuesto = 0m;
                            decimal dcm_SumaNaturaleza_Negativas_BaseRecargo = 0m;
                            decimal dcm_SumaNaturaleza_Negativas_Recargo = 0m;
                            decimal dcm_SumaNaturaleza_Negativas_TotalImpuestos = 0m;
                            decimal dcm_SumaNaturaleza_Negativas_TotalFinal = 0m;
                            if (lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NOEXENTOSNEGATIVAS_FILTRADO != null && lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NOEXENTOSNEGATIVAS_FILTRADO.Count > 0)
                            {
                                //Agregar linea
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Naturaleza(g_str_Titulos_Naturaleza_Negativas, int_ContadorFila));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_Naturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Naturaleza = g_str_Titulos_Naturaleza_Negativas;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseImponible = null;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseRecargo = null;
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Valor = null;
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Final = null;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA);
                                #endregion

                                //Agregar Cabecera
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Cabecera(g_str_Titulos_Cabecera_TipoImpuestos,
                                                                                                                        g_str_Titulos_Cabecera_BaseImponible,
                                                                                                                        g_str_Titulos_Cabecera_ImpuestoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Impuesto,
                                                                                                                        g_str_Titulos_Cabecera_BaseRecargo,
                                                                                                                        g_str_Titulos_Cabecera_RecargoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Recargo,
                                                                                                                        g_str_Titulos_Cabecera_TotalImpuesto,
                                                                                                                        g_str_Titulos_Cabecera_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                //AGRUPACION POR IMPUESTO PORCENTAJE
                                foreach (var obj_ImpuestoTipo in lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NOEXENTOSNEGATIVAS_FILTRADO.OrderBy(m => m.Impuesto_Porcentaje).GroupBy(x => new { x.ImpuestoTipo_Id, x.ImpuestoTipo_Descripcion }).Select(g => g.Key).ToList())
                                {
                                    //Para Suma
                                    List<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_NOEXENTOSNEGATIVAS_FILTRADO.Where(m => m.ImpuestoTipo_Id == obj_ImpuestoTipo.ImpuestoTipo_Id).ToList();
                                    if (lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA != null && lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.Count > 0)
                                    {
                                        decimal? dcm_BaseImponible_Total = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.Sum(m => m.BaseImponible);

                                        if (dcm_BaseImponible_Total != null && dcm_BaseImponible_Total.Value != 0m)
                                        {
                                            //Calculo Impuesto
                                            decimal dcm_Porcentaje_Impuesto = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.FirstOrDefault(m => m.Impuesto_Porcentaje != 0).Impuesto_Porcentaje;
                                            decimal dcm_Impuesto_Caculado = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.Sum(m => m.Impuesto_Valor);

                                            //Recargo
                                            decimal dcm_Base_Recargo = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.Where(m => m.Recargo_Valor != 0m).Sum(m => m.BaseImponible);
                                            decimal dcm_Porcentaje_Recargo = 0m;
                                            decimal dcm_Recargo_Caculado = 0m;
                                            if (dcm_Base_Recargo != 0m)
                                            {
                                                dcm_Porcentaje_Recargo = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.FirstOrDefault(m => m.Recargo_Porcentaje != 0).Recargo_Porcentaje;
                                                dcm_Recargo_Caculado = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_PARASUMA.Sum(m => m.Recargo_Valor);
                                            }

                                            //Rellenar modelo
                                            INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo = new INTERNO_ResumenImpuestos_Listado_Modelo();

                                            //Tipo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Tipo = "";
                                            //ImpuestoCabecera_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Id = -1;
                                            //ImpuestoCabecera_Codigo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Codigo = "";
                                            //ImpuestoCabecera_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Descripcion = "";
                                            //Delegacion_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Id = -1;
                                            //Delegacion_Codigo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Codigo = "";
                                            //Delegacion_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Descripcion = "";
                                            //Naturaleza
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Naturaleza = "";
                                            //ImpuestoTipo_Id
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Id = obj_ImpuestoTipo.ImpuestoTipo_Id;
                                            //ImpuestoTipo_Descripcion
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Descripcion = obj_ImpuestoTipo.ImpuestoTipo_Descripcion;
                                            //BaseImponible
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible = dcm_BaseImponible_Total.Value;
                                            //Impuesto_Porcentaje
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Porcentaje = dcm_Porcentaje_Impuesto;
                                            //Impuesto_Valor
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor = dcm_Impuesto_Caculado;
                                            //BaseRecargo
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo = dcm_Recargo_Caculado != 0 ? dcm_Base_Recargo : dcm_Nulo;
                                            //Recargo_Porcentaje
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Porcentaje = dcm_Recargo_Caculado != 0 ? dcm_Porcentaje_Recargo : dcm_Nulo;
                                            //Recargo_Valor
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor = dcm_Recargo_Caculado != 0 ? dcm_Recargo_Caculado : dcm_Nulo;
                                            //Total_Impuestos
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos = dcm_Impuesto_Caculado + dcm_Recargo_Caculado;
                                            //Total_Final
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final = dcm_BaseImponible_Total.Value + dcm_Impuesto_Caculado + dcm_Recargo_Caculado;

                                            //Añadir al DataGridView
                                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen(mdl_INTERNO_ResumenImpuestos_Listado_Modelo, int_ContadorFila));
                                            int_ContadorFila += 1;

                                            dcm_SumaNaturaleza_Negativas_BaseImponible += dcm_BaseImponible_Total.Value;
                                            dcm_SumaNaturaleza_Negativas_Impuesto += dcm_Impuesto_Caculado;
                                            dcm_SumaNaturaleza_Negativas_BaseRecargo += dcm_Base_Recargo;
                                            dcm_SumaNaturaleza_Negativas_Recargo += dcm_Recargo_Caculado;
                                            dcm_SumaNaturaleza_Negativas_TotalImpuestos += (dcm_Impuesto_Caculado + dcm_Recargo_Caculado);
                                            dcm_SumaNaturaleza_Negativas_TotalFinal += (dcm_BaseImponible_Total.Value + dcm_Impuesto_Caculado + dcm_Recargo_Caculado);

                                            #region Para Excel
                                            //TipoLineaParaInforme
                                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_Lineas;
                                            g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo);
                                            #endregion
                                        }
                                    }
                                }

                                //Agregar linea Suma tipo impuestos
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaNaturaleza(g_str_Titulos_Suma_TipoImpuestos,
                                                                                                                            dcm_SumaNaturaleza_Negativas_BaseImponible,
                                                                                                                            (dcm_SumaNaturaleza_Negativas_Impuesto != 0 ? dcm_SumaNaturaleza_Negativas_Impuesto : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Negativas_BaseRecargo != 0 ? dcm_SumaNaturaleza_Negativas_BaseRecargo : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Negativas_Recargo != 0 ? dcm_SumaNaturaleza_Negativas_Recargo : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Negativas_TotalImpuestos != 0 ? dcm_SumaNaturaleza_Negativas_TotalImpuestos : dcm_Nulo),
                                                                                                                            (dcm_SumaNaturaleza_Negativas_TotalFinal != 0 ? dcm_SumaNaturaleza_Negativas_TotalFinal : dcm_Nulo)));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_SumaNaturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Naturaleza = g_str_Titulos_Suma_TipoImpuestos;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseImponible = dcm_SumaNaturaleza_Negativas_BaseImponible;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Valor = (dcm_SumaNaturaleza_Negativas_Impuesto != 0 ? dcm_SumaNaturaleza_Negativas_Impuesto : dcm_Nulo);
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseRecargo = (dcm_SumaNaturaleza_Negativas_BaseRecargo != 0 ? dcm_SumaNaturaleza_Negativas_BaseRecargo : dcm_Nulo);
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Valor = (dcm_SumaNaturaleza_Negativas_Recargo != 0 ? dcm_SumaNaturaleza_Negativas_Recargo : dcm_Nulo);
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Impuestos = (dcm_SumaNaturaleza_Negativas_TotalImpuestos != 0 ? dcm_SumaNaturaleza_Negativas_TotalImpuestos : dcm_Nulo);
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Final = (dcm_SumaNaturaleza_Negativas_TotalFinal != 0 ? dcm_SumaNaturaleza_Negativas_TotalFinal : dcm_Nulo);

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA);
                                #endregion
                            }
                            #endregion

                            #region EXENTO-NEGATIVAS
                            //Filtrar el listado
                            List<INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo> lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_EXENTO_NEGATIVAS_FILTRADO = g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.Where(m => m.ImpuestoCabecera_Id == obj_ImpuestoCabecera.ImpuestoCabecera_Id && m.Delegacion_Id == obj_Delegacion.Delegacion_Id && m.Impuesto_Porcentaje == 0m && m.BaseImponible < 0m).ToList();
                            decimal dcm_SumaNaturaleza_ExentoNegativas_BaseImponible = 0m;
                            decimal dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo = 0m;
                            decimal dcm_SumaNaturaleza_ExentoNegativas_TotalFinal = 0m;
                            if (lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_EXENTO_NEGATIVAS_FILTRADO != null && lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_EXENTO_NEGATIVAS_FILTRADO.Count > 0)
                            {
                                //Agregar linea
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Naturaleza(g_str_Titulos_Naturaleza_ExentoNegativas, int_ContadorFila));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_Naturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Naturaleza = g_str_Titulos_Naturaleza_ExentoNegativas;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseImponible = null;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.BaseRecargo = null;
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Recargo_Valor = null;
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA.Total_Final = null;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_NATURALEZA);
                                #endregion

                                //Agregar Cabecera
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_Cabecera(g_str_Titulos_Cabecera_TipoImpuestos,
                                                                                                                        g_str_Titulos_Cabecera_BaseImponible,
                                                                                                                        g_str_Titulos_Cabecera_ImpuestoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Impuesto,
                                                                                                                        g_str_Titulos_Cabecera_BaseRecargo,
                                                                                                                        g_str_Titulos_Cabecera_RecargoPorcentaje,
                                                                                                                        g_str_Titulos_Cabecera_Recargo,
                                                                                                                        g_str_Titulos_Cabecera_TotalImpuesto,
                                                                                                                        g_str_Titulos_Cabecera_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                decimal? dcm_BaseImponible_Total = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_EXENTO_NEGATIVAS_FILTRADO.Sum(m => m.BaseImponible);

                                if (dcm_BaseImponible_Total != null && dcm_BaseImponible_Total.Value != 0m)
                                {
                                    //Recargo
                                    decimal dcm_Base_Recargo = lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo_EXENTO_NEGATIVAS_FILTRADO.Where(m => m.Recargo_Valor != 0m).Sum(m => m.BaseImponible);

                                    //Rellenar modelo
                                    INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo = new INTERNO_ResumenImpuestos_Listado_Modelo();

                                    //Tipo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Tipo = "";
                                    //ImpuestoCabecera_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Id = -1;
                                    //ImpuestoCabecera_Codigo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Codigo = "";
                                    //ImpuestoCabecera_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera_Descripcion = "";
                                    //Delegacion_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Id = -1;
                                    //Delegacion_Codigo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Codigo = "";
                                    //Delegacion_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion_Descripcion = "";
                                    //Naturaleza
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Naturaleza = "";
                                    //ImpuestoTipo_Id
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Id = -1;
                                    //ImpuestoTipo_Descripcion
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Descripcion = "";
                                    //BaseImponible
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible = dcm_BaseImponible_Total.Value;
                                    //Impuesto_Porcentaje
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Porcentaje = dcm_Nulo;
                                    //Impuesto_Valor
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor = dcm_Nulo;
                                    //BaseRecargo
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo = dcm_Base_Recargo != 0m ? dcm_Base_Recargo : dcm_Nulo;
                                    //Recargo_Porcentaje
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Porcentaje = dcm_Nulo;
                                    //Recargo_Valor
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor = dcm_Nulo;
                                    //Total_Impuestos
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos = dcm_Nulo;
                                    //Total_Final
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final = dcm_BaseImponible_Total.Value;

                                    //Añadir al DataGridView
                                    ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen(mdl_INTERNO_ResumenImpuestos_Listado_Modelo, int_ContadorFila));
                                    int_ContadorFila += 1;

                                    dcm_SumaNaturaleza_ExentoNegativas_BaseImponible += dcm_BaseImponible_Total.Value;
                                    dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo += dcm_Base_Recargo;
                                    dcm_SumaNaturaleza_ExentoNegativas_TotalFinal += dcm_BaseImponible_Total.Value;
                                    #region Para Excel
                                    //TipoLineaParaInforme
                                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_Lineas;
                                    g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo);
                                    #endregion
                                }

                                //Agregar linea Suma tipo impuestos
                                ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaNaturaleza(g_str_Titulos_Suma_TipoImpuestos,
                                                                                                                            dcm_SumaNaturaleza_ExentoNegativas_BaseImponible,
                                                                                                                            dcm_Nulo,
                                                                                                                            (dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo != 0m ? dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo : dcm_Nulo),
                                                                                                                            dcm_Nulo,
                                                                                                                            dcm_Nulo,
                                                                                                                            dcm_SumaNaturaleza_ExentoNegativas_TotalFinal));
                                Thread.Sleep(1);
                                int_ContadorFila += 1;

                                #region PARA EXCEL
                                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA = new INTERNO_ResumenImpuestos_Listado_Modelo();
                                //TipoLineaParaInforme
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_SumaNaturaleza;
                                //Tipo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Tipo = "";
                                //ImpuestoCabecera_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Id = -1;
                                //ImpuestoCabecera_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Codigo = "";
                                //ImpuestoCabecera_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoCabecera_Descripcion = "";
                                //Delegacion_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Id = -1;
                                //Delegacion_Codigo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Codigo = "";
                                //Delegacion_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Delegacion_Descripcion = "";
                                //Naturaleza
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Naturaleza = g_str_Titulos_Suma_TipoImpuestos;
                                //ImpuestoTipo_Id
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Id = -1;
                                //ImpuestoTipo_Descripcion
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.ImpuestoTipo_Descripcion = "";
                                //BaseImponible
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseImponible = dcm_SumaNaturaleza_ExentoNegativas_BaseImponible;
                                //Impuesto_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Porcentaje = null;
                                //Impuesto_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Impuesto_Valor = null;
                                //BaseRecargo
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.BaseRecargo = (dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo != 0m ? dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo : dcm_Nulo);
                                //Recargo_Porcentaje
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Porcentaje = null;
                                //Recargo_Valor
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Recargo_Valor = null;
                                //Total_Impuestos
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Impuestos = null;
                                //Total_Final
                                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA.Total_Final = dcm_SumaNaturaleza_ExentoNegativas_TotalFinal;

                                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMANATURALEZA);
                                #endregion
                            }

                            #endregion

                            //Agregar linea Suma delegacion Actual
                            ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaDelegacion(g_str_Titulos_Suma_Delegacion + " " + obj_Delegacion.Delegacion_Codigo,
                                                                                                                    dcm_SumaNaturaleza_Impuesto_BaseImponible + dcm_SumaNaturaleza_Exento_BaseImponible + dcm_SumaNaturaleza_Negativas_BaseImponible + dcm_SumaNaturaleza_ExentoNegativas_BaseImponible,
                                                                                                                    ((dcm_SumaNaturaleza_Impuesto_Impuesto + dcm_SumaNaturaleza_Negativas_Impuesto) != 0m ? (dcm_SumaNaturaleza_Impuesto_Impuesto + dcm_SumaNaturaleza_Negativas_Impuesto) : dcm_Nulo),
                                                                                                                    ((dcm_SumaNaturaleza_Impuesto_BaseRecargo + dcm_SumaNaturaleza_Exento_BaseRecargo + dcm_SumaNaturaleza_Negativas_BaseRecargo + dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo) != 0m ? (dcm_SumaNaturaleza_Impuesto_BaseRecargo + dcm_SumaNaturaleza_Exento_BaseRecargo + dcm_SumaNaturaleza_Negativas_BaseRecargo + dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo) : dcm_Nulo),
                                                                                                                    ((dcm_SumaNaturaleza_Impuesto_Recargo + dcm_SumaNaturaleza_Negativas_Recargo) != 0m ? (dcm_SumaNaturaleza_Impuesto_Recargo + dcm_SumaNaturaleza_Negativas_Recargo) : dcm_Nulo),
                                                                                                                    ((dcm_SumaNaturaleza_Impuesto_TotalImpuestos + dcm_SumaNaturaleza_Negativas_TotalImpuestos) != 0m ? (dcm_SumaNaturaleza_Impuesto_TotalImpuestos + dcm_SumaNaturaleza_Negativas_TotalImpuestos) : dcm_Nulo),
                                                                                                                    ((dcm_SumaNaturaleza_Impuesto_TotalFinal + dcm_SumaNaturaleza_Exento_TotalFinal + dcm_SumaNaturaleza_Negativas_TotalFinal + dcm_SumaNaturaleza_ExentoNegativas_TotalFinal) != 0m ? (dcm_SumaNaturaleza_Impuesto_TotalFinal + dcm_SumaNaturaleza_Exento_TotalFinal + dcm_SumaNaturaleza_Negativas_TotalFinal + dcm_SumaNaturaleza_ExentoNegativas_TotalFinal) : dcm_Nulo)));


                            dcm_SumaTablaImpuestos_Impuesto_BaseImponible += (dcm_SumaNaturaleza_Impuesto_BaseImponible + dcm_SumaNaturaleza_Exento_BaseImponible + dcm_SumaNaturaleza_Negativas_BaseImponible + dcm_SumaNaturaleza_ExentoNegativas_BaseImponible);
                            dcm_SumaTablaImpuestos_Impuesto_Impuesto += (dcm_SumaNaturaleza_Impuesto_Impuesto + dcm_SumaNaturaleza_Negativas_Impuesto);
                            dcm_SumaTablaImpuestos_Impuesto_BaseRecargo += (dcm_SumaNaturaleza_Impuesto_BaseRecargo + dcm_SumaNaturaleza_Exento_BaseRecargo + dcm_SumaNaturaleza_Negativas_BaseRecargo + dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo);
                            dcm_SumaTablaImpuestos_Impuesto_Recargo += (dcm_SumaNaturaleza_Impuesto_Recargo + dcm_SumaNaturaleza_Negativas_Recargo);
                            dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos += (dcm_SumaNaturaleza_Impuesto_TotalImpuestos + dcm_SumaNaturaleza_Negativas_TotalImpuestos);
                            dcm_SumaTablaImpuestos_Impuesto_TotalFinal += (dcm_SumaNaturaleza_Impuesto_TotalFinal + dcm_SumaNaturaleza_Exento_TotalFinal + dcm_SumaNaturaleza_Negativas_TotalFinal + dcm_SumaNaturaleza_ExentoNegativas_TotalFinal);

                            #region PARA EXCEL
                            INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION = new INTERNO_ResumenImpuestos_Listado_Modelo();
                            //TipoLineaParaInforme
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_SumaDelegacion;
                            //Tipo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Tipo = "";
                            //ImpuestoCabecera_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.ImpuestoCabecera_Id = -1;
                            //ImpuestoCabecera_Codigo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.ImpuestoCabecera_Codigo = "";
                            //ImpuestoCabecera_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.ImpuestoCabecera_Descripcion = "";
                            //Delegacion_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Delegacion_Id = -1;
                            //Delegacion_Codigo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Delegacion_Codigo = "";
                            //Delegacion_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Delegacion_Descripcion = g_str_Titulos_Suma_Delegacion + " " + obj_Delegacion.Delegacion_Codigo;
                            //Naturaleza
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Naturaleza = "";
                            //ImpuestoTipo_Id
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.ImpuestoTipo_Id = -1;
                            //ImpuestoTipo_Descripcion
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.ImpuestoTipo_Descripcion = "";
                            //BaseImponible
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.BaseImponible = dcm_SumaNaturaleza_Impuesto_BaseImponible + dcm_SumaNaturaleza_Exento_BaseImponible + dcm_SumaNaturaleza_Negativas_BaseImponible + dcm_SumaNaturaleza_ExentoNegativas_BaseImponible;
                            //Impuesto_Porcentaje
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Impuesto_Porcentaje = null;
                            //Impuesto_Valor
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Impuesto_Valor = ((dcm_SumaNaturaleza_Impuesto_Impuesto + dcm_SumaNaturaleza_Negativas_Impuesto) != 0m ? (dcm_SumaNaturaleza_Impuesto_Impuesto + dcm_SumaNaturaleza_Negativas_Impuesto) : dcm_Nulo);
                            //BaseRecargo
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.BaseRecargo = ((dcm_SumaNaturaleza_Impuesto_BaseRecargo + dcm_SumaNaturaleza_Exento_BaseRecargo + dcm_SumaNaturaleza_Negativas_BaseRecargo + dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo) != 0m ? (dcm_SumaNaturaleza_Impuesto_BaseRecargo + dcm_SumaNaturaleza_Exento_BaseRecargo + dcm_SumaNaturaleza_Negativas_BaseRecargo + dcm_SumaNaturaleza_ExentoNegativas_BaseRecargo) : dcm_Nulo);
                            //Recargo_Porcentaje
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Recargo_Porcentaje = null;
                            //Recargo_Valor
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Recargo_Valor = ((dcm_SumaNaturaleza_Impuesto_Recargo + dcm_SumaNaturaleza_Negativas_Recargo) != 0m ? (dcm_SumaNaturaleza_Impuesto_Recargo + dcm_SumaNaturaleza_Negativas_Recargo) : dcm_Nulo);
                            //Total_Impuestos
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Total_Impuestos = ((dcm_SumaNaturaleza_Impuesto_TotalImpuestos + dcm_SumaNaturaleza_Negativas_TotalImpuestos) != 0m ? (dcm_SumaNaturaleza_Impuesto_TotalImpuestos + dcm_SumaNaturaleza_Negativas_TotalImpuestos) : dcm_Nulo);
                            //Total_Final
                            mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION.Total_Final = ((dcm_SumaNaturaleza_Impuesto_TotalFinal + dcm_SumaNaturaleza_Exento_TotalFinal + dcm_SumaNaturaleza_Negativas_TotalFinal + dcm_SumaNaturaleza_ExentoNegativas_TotalFinal) != 0m ? (dcm_SumaNaturaleza_Impuesto_TotalFinal + dcm_SumaNaturaleza_Exento_TotalFinal + dcm_SumaNaturaleza_Negativas_TotalFinal + dcm_SumaNaturaleza_ExentoNegativas_TotalFinal) : dcm_Nulo);

                            g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMADELEGACION);
                            #endregion
                        }

                        //Agregar linea Suma delegacion
                        ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaTablaImpuestos(g_str_Titulos_Suma_TablaImpuestos + " " + obj_ImpuestoCabecera.ImpuestoCabecera_Codigo,
                                                                                                                        dcm_SumaTablaImpuestos_Impuesto_BaseImponible,
                                                                                                                        (dcm_SumaTablaImpuestos_Impuesto_Impuesto != 0m ? dcm_SumaTablaImpuestos_Impuesto_Impuesto : dcm_Nulo),
                                                                                                                        (dcm_SumaTablaImpuestos_Impuesto_BaseRecargo != 0m ? dcm_SumaTablaImpuestos_Impuesto_BaseRecargo : dcm_Nulo),
                                                                                                                        (dcm_SumaTablaImpuestos_Impuesto_Recargo != 0m ? dcm_SumaTablaImpuestos_Impuesto_Recargo : dcm_Nulo),
                                                                                                                        (dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos != 0m ? dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos : dcm_Nulo),
                                                                                                                        (dcm_SumaTablaImpuestos_Impuesto_TotalFinal != 0m ? dcm_SumaTablaImpuestos_Impuesto_TotalFinal : dcm_Nulo)));
                        Thread.Sleep(1);
                        int_ContadorFila += 1;

                        dcm_SumaRepercutidos_Impuesto_BaseImponible += dcm_SumaTablaImpuestos_Impuesto_BaseImponible;
                        dcm_SumaRepercutidos_Impuesto_Impuesto += dcm_SumaTablaImpuestos_Impuesto_Impuesto;
                        dcm_SumaRepercutidos_Impuesto_BaseRecargo += dcm_SumaTablaImpuestos_Impuesto_BaseRecargo;
                        dcm_SumaRepercutidos_Impuesto_Recargo += dcm_SumaTablaImpuestos_Impuesto_Recargo;
                        dcm_SumaRepercutidos_Impuesto_TotalImpuestos += dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos;
                        dcm_SumaRepercutidos_Impuesto_TotalFinal += dcm_SumaTablaImpuestos_Impuesto_TotalFinal;

                        #region PARA EXCEL
                        INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS = new INTERNO_ResumenImpuestos_Listado_Modelo();
                        //TipoLineaParaInforme
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_SumaTablaImpuestos;
                        //Tipo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Tipo = "";
                        //ImpuestoCabecera_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.ImpuestoCabecera_Id = -1;
                        //ImpuestoCabecera_Codigo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.ImpuestoCabecera_Codigo = "";
                        //ImpuestoCabecera_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.ImpuestoCabecera_Descripcion = g_str_Titulos_Suma_TablaImpuestos + " " + obj_ImpuestoCabecera.ImpuestoCabecera_Codigo;
                        //Delegacion_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Delegacion_Id = -1;
                        //Delegacion_Codigo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Delegacion_Codigo = "";
                        //Delegacion_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Delegacion_Descripcion = "";
                        //Naturaleza
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Naturaleza = "";
                        //ImpuestoTipo_Id
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.ImpuestoTipo_Id = -1;
                        //ImpuestoTipo_Descripcion
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.ImpuestoTipo_Descripcion = "";
                        //BaseImponible
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.BaseImponible = dcm_SumaTablaImpuestos_Impuesto_BaseImponible;
                        //Impuesto_Porcentaje
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Impuesto_Porcentaje = null;
                        //Impuesto_Valor
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Impuesto_Valor = (dcm_SumaTablaImpuestos_Impuesto_Impuesto != 0m ? dcm_SumaTablaImpuestos_Impuesto_Impuesto : dcm_Nulo);
                        //BaseRecargo
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.BaseRecargo = (dcm_SumaTablaImpuestos_Impuesto_BaseRecargo != 0m ? dcm_SumaTablaImpuestos_Impuesto_BaseRecargo : dcm_Nulo);
                        //Recargo_Porcentaje
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Recargo_Porcentaje = null;
                        //Recargo_Valor
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Recargo_Valor = (dcm_SumaTablaImpuestos_Impuesto_Recargo != 0m ? dcm_SumaTablaImpuestos_Impuesto_Recargo : dcm_Nulo);
                        //Total_Impuestos
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Total_Impuestos = (dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos != 0m ? dcm_SumaTablaImpuestos_Impuesto_TotalImpuestos : dcm_Nulo);
                        //Total_Final
                        mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS.Total_Final = (dcm_SumaTablaImpuestos_Impuesto_TotalFinal != 0m ? dcm_SumaTablaImpuestos_Impuesto_TotalFinal : dcm_Nulo);

                        g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMATABLAIMPUESTOS);
                        #endregion
                    }

                    //Agregar linea Suma impuestos
                    ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_SumaRepercutidos(g_str_Titulos_Suma_Repercutidos,
                                                                                                                dcm_SumaRepercutidos_Impuesto_BaseImponible,
                                                                                                                (dcm_SumaRepercutidos_Impuesto_Impuesto != 0m ? dcm_SumaRepercutidos_Impuesto_Impuesto : dcm_Nulo),
                                                                                                                (dcm_SumaRepercutidos_Impuesto_BaseRecargo != 0m ? dcm_SumaRepercutidos_Impuesto_BaseRecargo : dcm_Nulo),
                                                                                                                (dcm_SumaRepercutidos_Impuesto_Recargo != 0m ? dcm_SumaRepercutidos_Impuesto_Recargo : dcm_Nulo),
                                                                                                                (dcm_SumaRepercutidos_Impuesto_TotalImpuestos != 0m ? dcm_SumaRepercutidos_Impuesto_TotalImpuestos : dcm_Nulo),
                                                                                                                (dcm_SumaRepercutidos_Impuesto_TotalFinal != 0m ? dcm_SumaRepercutidos_Impuesto_TotalFinal : dcm_Nulo)));
                    Thread.Sleep(1);
                    int_ContadorFila += 1;

                    #region PARA EXCEL
                    INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO = new INTERNO_ResumenImpuestos_Listado_Modelo();
                    //TipoLineaParaInforme
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.TipoLineaParaInforme = g_str_TipoLinea_Repercutido_SumaTipo;
                    //Tipo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.Tipo = g_str_Titulos_Suma_Repercutidos;
                    //ImpuestoCabecera_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.ImpuestoCabecera_Id = -1;
                    //ImpuestoCabecera_Codigo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.ImpuestoCabecera_Codigo = "";
                    //ImpuestoCabecera_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.ImpuestoCabecera_Descripcion = "";
                    //Delegacion_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.Delegacion_Id = -1;
                    //Delegacion_Codigo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.Delegacion_Codigo = "";
                    //Delegacion_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.Delegacion_Descripcion = "";
                    //Naturaleza
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.Naturaleza = "";
                    //ImpuestoTipo_Id
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.ImpuestoTipo_Id = -1;
                    //ImpuestoTipo_Descripcion
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.ImpuestoTipo_Descripcion = "";
                    //BaseImponible
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.BaseImponible = dcm_SumaRepercutidos_Impuesto_BaseImponible;
                    //Impuesto_Porcentaje
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.Impuesto_Porcentaje = null;
                    //Impuesto_Valor
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.Impuesto_Valor = (dcm_SumaRepercutidos_Impuesto_Impuesto != 0m ? dcm_SumaRepercutidos_Impuesto_Impuesto : dcm_Nulo);
                    //BaseRecargo
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.BaseRecargo = (dcm_SumaRepercutidos_Impuesto_BaseRecargo != 0m ? dcm_SumaRepercutidos_Impuesto_BaseRecargo : dcm_Nulo);
                    //Recargo_Porcentaje
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.Recargo_Porcentaje = null;
                    //Recargo_Valor
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.Recargo_Valor = (dcm_SumaRepercutidos_Impuesto_Recargo != 0m ? dcm_SumaRepercutidos_Impuesto_Recargo : dcm_Nulo);
                    //Total_Impuestos
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.Total_Impuestos = (dcm_SumaRepercutidos_Impuesto_TotalImpuestos != 0m ? dcm_SumaRepercutidos_Impuesto_TotalImpuestos : dcm_Nulo);
                    //Total_Final
                    mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO.Total_Final = (dcm_SumaRepercutidos_Impuesto_TotalFinal != 0m ? dcm_SumaRepercutidos_Impuesto_TotalFinal : dcm_Nulo);

                    g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDO);
                    #endregion
                }
                #endregion

                #region Repercutido-Soportado
                //Agregar linea
               ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Resumen_RepercutidosSoportado(g_str_Titulos_Resumen_RepercutidoSoportado,
                                                                                                                dcm_SumaRepercutidos_Impuesto_BaseImponible- dcm_SumaSoportado_Impuesto_BaseImponible,
                                                                                                                ((dcm_SumaRepercutidos_Impuesto_Impuesto - dcm_SumaSoportado_Impuesto_Impuesto) != 0m ? (dcm_SumaRepercutidos_Impuesto_Impuesto - dcm_SumaSoportado_Impuesto_Impuesto) : dcm_Nulo),
                                                                                                                ((dcm_SumaRepercutidos_Impuesto_BaseRecargo- dcm_SumaSoportado_Impuesto_BaseRecargo) != 0m ? (dcm_SumaRepercutidos_Impuesto_BaseRecargo- dcm_SumaSoportado_Impuesto_BaseRecargo) : dcm_Nulo),
                                                                                                                ((dcm_SumaRepercutidos_Impuesto_Recargo- dcm_SumaSoportado_Impuesto_Recargo) != 0m ? (dcm_SumaRepercutidos_Impuesto_Recargo- dcm_SumaSoportado_Impuesto_Recargo) : dcm_Nulo),
                                                                                                                ((dcm_SumaRepercutidos_Impuesto_TotalImpuestos- dcm_SumaSoportado_Impuesto_TotalImpuestos) != 0m ? (dcm_SumaRepercutidos_Impuesto_TotalImpuestos - dcm_SumaSoportado_Impuesto_TotalImpuestos) : dcm_Nulo),
                                                                                                                ((dcm_SumaRepercutidos_Impuesto_TotalFinal - dcm_SumaSoportado_Impuesto_TotalFinal) != 0m ? (dcm_SumaRepercutidos_Impuesto_TotalFinal - dcm_SumaSoportado_Impuesto_TotalFinal) : dcm_Nulo)));

                #region PARA EXCEL
                INTERNO_ResumenImpuestos_Listado_Modelo mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO = new INTERNO_ResumenImpuestos_Listado_Modelo();
                //TipoLineaParaInforme
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.TipoLineaParaInforme = g_str_TipoLinea_Resumen;
                //Tipo
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.Tipo = g_str_Titulos_Resumen_RepercutidoSoportado;
                //ImpuestoCabecera_Id
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.ImpuestoCabecera_Id = -1;
                //ImpuestoCabecera_Codigo
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.ImpuestoCabecera_Codigo = "";
                //ImpuestoCabecera_Descripcion
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.ImpuestoCabecera_Descripcion = "";
                //Delegacion_Id
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.Delegacion_Id = -1;
                //Delegacion_Codigo
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.Delegacion_Codigo = "";
                //Delegacion_Descripcion
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.Delegacion_Descripcion = "";
                //Naturaleza
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.Naturaleza = "";
                //ImpuestoTipo_Id
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.ImpuestoTipo_Id = -1;
                //ImpuestoTipo_Descripcion
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.ImpuestoTipo_Descripcion = "";
                //BaseImponible
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.BaseImponible = dcm_SumaRepercutidos_Impuesto_BaseImponible - dcm_SumaSoportado_Impuesto_BaseImponible;
                //Impuesto_Porcentaje
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.Impuesto_Porcentaje = null;
                //Impuesto_Valor
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.Impuesto_Valor = ((dcm_SumaRepercutidos_Impuesto_Impuesto - dcm_SumaSoportado_Impuesto_Impuesto) != 0m ? (dcm_SumaRepercutidos_Impuesto_Impuesto - dcm_SumaSoportado_Impuesto_Impuesto) : dcm_Nulo);
                //BaseRecargo
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.BaseRecargo = ((dcm_SumaRepercutidos_Impuesto_BaseRecargo - dcm_SumaSoportado_Impuesto_BaseRecargo) != 0m ? (dcm_SumaRepercutidos_Impuesto_BaseRecargo - dcm_SumaSoportado_Impuesto_BaseRecargo) : dcm_Nulo);
                //Recargo_Porcentaje
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.Recargo_Porcentaje = null;
                //Recargo_Valor
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.Recargo_Valor = ((dcm_SumaRepercutidos_Impuesto_Recargo - dcm_SumaSoportado_Impuesto_Recargo) != 0m ? (dcm_SumaRepercutidos_Impuesto_Recargo - dcm_SumaSoportado_Impuesto_Recargo) : dcm_Nulo);
                //Total_Impuestos
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.Total_Impuestos = ((dcm_SumaRepercutidos_Impuesto_TotalImpuestos - dcm_SumaSoportado_Impuesto_TotalImpuestos) != 0m ? (dcm_SumaRepercutidos_Impuesto_TotalImpuestos - dcm_SumaSoportado_Impuesto_TotalImpuestos) : dcm_Nulo);
                //Total_Final
                mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO.Total_Final = ((dcm_SumaRepercutidos_Impuesto_TotalFinal - dcm_SumaSoportado_Impuesto_TotalFinal) != 0m ? (dcm_SumaRepercutidos_Impuesto_TotalFinal - dcm_SumaSoportado_Impuesto_TotalFinal) : dcm_Nulo);

                g_lst_INTERNO_ResumenImpuestos_Listado_Modelo.Add(mdl_INTERNO_ResumenImpuestos_Listado_Modelo_PARAEXCEL_SUMAREPERCUTIDOSOPORTADO);
                #endregion

                #endregion
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Resumen_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (!g_frm_P_ResumenImpuestos.IsDisposed && e.ProgressPercentage == 1)
                {
                    DataGridViewRow dgrv_Fila = (DataGridViewRow)e.UserState;
                    g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.Rows.Add(dgrv_Fila);
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Resumen_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        public DataGridViewRow Transformar_Modelo_A_Row_Resumen_Tipo(string _str_Tipo, int _int_ContadorFila)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Si es Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Tipo))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Tipo;
                }

                int_ContadorFila += 1;
            }

            //FORMATO DE TEXTO
            obj_DataGridViewRow.DefaultCellStyle.Font = Fuentes.G_FONT_TEXTOS_NEGRITA;
            if ((_int_ContadorFila % 2) == 0)
            {
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_FILANORMAL_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_FILANORMAL_LETRA;
            }
            else
            {
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_LETRA;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Resumen_ImpuestoCabecera(string _str_ImpuestoCabecera,int _int_ContadorFila)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Si es Impuesto
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_ImpuestoCabecera;
                }

                int_ContadorFila += 1;
            }

            //FORMATO DE TEXTO
            obj_DataGridViewRow.DefaultCellStyle.Font = Fuentes.G_FONT_TEXTOS_NEGRITA;
            if ((_int_ContadorFila % 2) == 0)
            {
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_FILANORMAL_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_FILANORMAL_LETRA;
            }
            else
            {
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_LETRA;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Resumen_Delegacion(string _str_Delegacion, int _int_ContadorFila)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);


            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Si es Delegacion
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Delegacion;
                }

                int_ContadorFila += 1;
            }

            //FORMATO DE TEXTO
            obj_DataGridViewRow.DefaultCellStyle.Font = Fuentes.G_FONT_TEXTOS_NEGRITA;
            if ((_int_ContadorFila % 2) == 0)
            {
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_FILANORMAL_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_FILANORMAL_LETRA;
            }
            else
            {
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_LETRA;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Resumen_Naturaleza(string _str_Naturaleza,int _int_ContadorFila)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Si es Naturaleza
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Naturaleza))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Naturaleza;
                }

                int_ContadorFila += 1;
            }

            //FORMATO DE TEXTO
            obj_DataGridViewRow.DefaultCellStyle.Font = Fuentes.G_FONT_TEXTOS_NEGRITA;
            if ((_int_ContadorFila % 2) == 0)
            {
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_FILANORMAL_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_FILANORMAL_LETRA;
            }
            else
            {
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_LETRA;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Resumen_Cabecera(string _str_Titulo_TipoImpuesto,
                                                                         string _str_Titulo_BaseImponible,
                                                                         string _str_Titulo_ImpuestoPorcentaje,
                                                                         string _str_Titulo_ImpuestoValor,
                                                                         string _str_Titulo_RecargoBase,
                                                                         string _str_Titulo_RecargoPorcentaje,
                                                                         string _str_Titulo_RecargoValor,
                                                                         string _str_Titulo_RecargoTotalImpuestos,
                                                                         string _str_Titulo_RecargoTotalFinal)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Si es Naturaleza
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoTipo_Descripcion))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo_TipoImpuesto;
                }
                //BaseImponible
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo_BaseImponible;
                }
                //Impuesto_Porcentaje
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Porcentaje))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo_ImpuestoPorcentaje;
                }
                //Impuesto_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo_ImpuestoValor;
                }
                //BaseRecargo
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo_RecargoBase;
                }
                //Recargo_Porcentaje
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Porcentaje))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo_RecargoPorcentaje;
                }
                //Recargo_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo_RecargoValor;
                }
                //Total_Impuestos
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo_RecargoTotalImpuestos;
                }
                //Total_Final
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo_RecargoTotalFinal;
                }

                //Si es de Estado Abierto se cambio el color de la fila
                obj_DataGridViewRow.DefaultCellStyle.BackColor = Colores.G_COLOR_PRINCIPAL_BASE;
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_PRINCIPAL_BASE;
                obj_DataGridViewRow.DefaultCellStyle.ForeColor = Colores.G_COLOR_LISTADO_CABECERA_LETRA;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_CABECERA_LETRA;

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Resumen(INTERNO_ResumenImpuestos_Listado_Modelo _mdl_INTERNO_ResumenImpuestos_Listado_Modelo, int _int_ContadorFila)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Que no sea ni impuestocabecera ni delegacion
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna != nameof(INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera) &&
                    mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna != nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion))
                {
                    //Segun el Tipo
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                    {
                        DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_ResumenImpuestos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_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_ResumenImpuestos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_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_ResumenImpuestos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_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_ResumenImpuestos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_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_ResumenImpuestos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_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_ResumenImpuestos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Listado_Modelo, null);

                        long? lng_valor = long.Parse(str_Valor);
                        if (lng_valor != null)
                        {
                            obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                        }
                    }
                    else
                    {
                        if (_mdl_INTERNO_ResumenImpuestos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Listado_Modelo, null) != null)
                        {
                            //Es decimal
                            if (Funciones.IsDecimal(_mdl_INTERNO_ResumenImpuestos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Listado_Modelo, null).ToString()))
                            {
                                decimal? dcm_valor = (decimal?)_mdl_INTERNO_ResumenImpuestos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Listado_Modelo, null);
                                if (dcm_valor != null)
                                {
                                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_valor;
                                }
                            }
                            else
                            {
                                obj_DataGridViewRow.Cells[int_ContadorFila].Value = _mdl_INTERNO_ResumenImpuestos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Listado_Modelo, null);
                            }
                        }
                        else
                        {
                            obj_DataGridViewRow.Cells[int_ContadorFila].Value = _mdl_INTERNO_ResumenImpuestos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_ResumenImpuestos_Listado_Modelo, null);
                        }
                    }
                }

                int_ContadorFila += 1;
            }

            //FORMATO DE TEXTO
            if ((_int_ContadorFila % 2) == 0)
            {
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_FILANORMAL_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_FILANORMAL_LETRA;
            }
            else
            {
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_LETRA;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Resumen_SumaNaturaleza(string _str_Titulo, 
                                                                                decimal dcm_Impuesto_BaseImponible,
                                                                                decimal? _dcm_Impuesto_Impuesto,
                                                                                decimal? _dcm_Impuesto_BaseRecargo,
                                                                                decimal? _dcm_Impuesto_Recargo,
                                                                                decimal? _dcm_Impuesto_TotalImpuesto,
                                                                                decimal? _dcm_Impuesto_TotalFinal)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Si es Naturaleza
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Naturaleza))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo;
                }
                //BaseImponible
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_Impuesto_BaseImponible;
                }
                //Impuesto_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor))
                {
                    if (_dcm_Impuesto_Impuesto != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Impuesto;
                    }
                }
                //BaseRecargo
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo))
                {
                    if (_dcm_Impuesto_BaseRecargo!=null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_BaseRecargo;
                    }
                }
                //Recargo_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor))
                {
                    if (_dcm_Impuesto_Recargo != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Recargo;
                    }
                }
                //Total_Impuestos
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos))
                {
                    if (_dcm_Impuesto_TotalImpuesto != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalImpuesto;
                    }
                }
                //Total_Final
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final))
                {
                    if (_dcm_Impuesto_TotalFinal != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalFinal;
                    }
                }

                //Si es de Estado Abierto se cambio el color de la fila
                obj_DataGridViewRow.DefaultCellStyle.BackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.ForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Resumen_SumaDelegacion(string _str_Titulo,
                                                                                 decimal dcm_Impuesto_BaseImponible,
                                                                                 decimal? _dcm_Impuesto_Impuesto,
                                                                                 decimal? _dcm_Impuesto_BaseRecargo,
                                                                                 decimal? _dcm_Impuesto_Recargo,
                                                                                 decimal? _dcm_Impuesto_TotalImpuesto,
                                                                                decimal? _dcm_Impuesto_TotalFinal)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Si es Delegacion
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Delegacion))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo;
                }
                //BaseImponible
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_Impuesto_BaseImponible;
                }
                //Impuesto_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Impuesto;
                }
                //BaseRecargo
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_BaseRecargo;
                }
                //Recargo_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Recargo;
                }
                //Total_Impuestos
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalImpuesto;
                }
                //Total_Final
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalFinal;
                }

                //Si es de Estado Abierto se cambio el color de la fila
                obj_DataGridViewRow.DefaultCellStyle.BackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.ForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        public DataGridViewRow Transformar_Modelo_A_Row_Resumen_SumaTablaImpuestos(string _str_Titulo,
                                                                                    decimal dcm_Impuesto_BaseImponible,
                                                                                    decimal? _dcm_Impuesto_Impuesto,
                                                                                    decimal? _dcm_Impuesto_BaseRecargo,
                                                                                    decimal? _dcm_Impuesto_Recargo,
                                                                                    decimal? _dcm_Impuesto_TotalImpuesto,
                                                                                    decimal? _dcm_Impuesto_TotalFinal)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Si es ImpuestoCabecera
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.ImpuestoCabecera))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo;
                }
                //BaseImponible
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_Impuesto_BaseImponible;
                }
                //Impuesto_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Impuesto;
                }
                //BaseRecargo
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_BaseRecargo;
                }
                //Recargo_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Recargo;
                }
                //Total_Impuestos
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalImpuesto;
                }
                //Total_Final
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalFinal;
                }

                //Si es de Estado Abierto se cambio el color de la fila
                obj_DataGridViewRow.DefaultCellStyle.BackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.ForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        public DataGridViewRow Transformar_Modelo_A_Row_Resumen_SumaSoportados(string _str_Titulo,
                                                                                    decimal dcm_Impuesto_BaseImponible,
                                                                                    decimal? _dcm_Impuesto_Impuesto,
                                                                                    decimal? _dcm_Impuesto_BaseRecargo,
                                                                                    decimal? _dcm_Impuesto_Recargo,
                                                                                    decimal? _dcm_Impuesto_TotalImpuesto,
                                                                                    decimal? _dcm_Impuesto_TotalFinal)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Si es Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Tipo))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo;
                }
                //BaseImponible
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_Impuesto_BaseImponible;
                }
                //Impuesto_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Impuesto;
                }
                //BaseRecargo
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_BaseRecargo;
                }
                //Recargo_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Recargo;
                }
                //Total_Impuestos
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalImpuesto;
                }
                //Total_Final
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalFinal;
                }

                //Si es de Estado Abierto se cambio el color de la fila
                obj_DataGridViewRow.DefaultCellStyle.BackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.ForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Resumen_SumaRepercutidos(string _str_Titulo,
                                                                                    decimal dcm_Impuesto_BaseImponible,
                                                                                    decimal? _dcm_Impuesto_Impuesto,
                                                                                    decimal? _dcm_Impuesto_BaseRecargo,
                                                                                    decimal? _dcm_Impuesto_Recargo,
                                                                                    decimal? _dcm_Impuesto_TotalImpuesto,
                                                                                    decimal? _dcm_Impuesto_TotalFinal)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Si es Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Tipo))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo;
                }
                //BaseImponible
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_Impuesto_BaseImponible;
                }
                //Impuesto_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Impuesto;
                }
                //BaseRecargo
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_BaseRecargo;
                }
                //Recargo_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Recargo;
                }
                //Total_Impuestos
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalImpuesto;
                }
                //Total_Final
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalFinal;
                }

                //Si es de Estado Abierto se cambio el color de la fila
                obj_DataGridViewRow.DefaultCellStyle.BackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.ForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Resumen_RepercutidosSoportado(string _str_Titulo,
                                                                                    decimal dcm_Impuesto_BaseImponible,
                                                                                    decimal? _dcm_Impuesto_Impuesto,
                                                                                    decimal? _dcm_Impuesto_BaseRecargo,
                                                                                    decimal? _dcm_Impuesto_Recargo,
                                                                                    decimal? _dcm_Impuesto_TotalImpuesto,
                                                                                    decimal? _dcm_Impuesto_TotalFinal)
        {
            DataGridViewRow obj_DataGridViewRow = (DataGridViewRow)g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.RowTemplate.Clone();
            obj_DataGridViewRow.CreateCells(g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen);

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Resumen_Columnas)
            {
                //Si es Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Tipo))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _str_Titulo;
                }
                //BaseImponible
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseImponible))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_Impuesto_BaseImponible;
                }
                //Impuesto_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Impuesto_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Impuesto;
                }
                //BaseRecargo
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.BaseRecargo))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_BaseRecargo;
                }
                //Recargo_Valor
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Recargo_Valor))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_Recargo;
                }
                //Total_Impuestos
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Impuestos))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalImpuesto;
                }
                //Total_Final
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna == nameof(INTERNO_ResumenImpuestos_Listado_Modelo.Total_Final))
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _dcm_Impuesto_TotalFinal;
                }

                //Si es de Estado Abierto se cambio el color de la fila
                obj_DataGridViewRow.DefaultCellStyle.BackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.SelectionBackColor = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                obj_DataGridViewRow.DefaultCellStyle.ForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;
                obj_DataGridViewRow.DefaultCellStyle.SelectionForeColor = Colores.G_COLOR_LISTADO_TOTALES_LETRA;

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        #endregion

        #region Exportar Excel

        public void Exportar_Excel()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_ResumenImpuestos.Enabled = false;

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

                BackgroundWorker obj_TareaAsincrona_ExportarExcel = new BackgroundWorker();
                obj_TareaAsincrona_ExportarExcel.DoWork += new DoWorkEventHandler(TareaAsincrona_ExportarExcel_DoWork);
                obj_TareaAsincrona_ExportarExcel.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_ExportarExcel_Completed);
                obj_TareaAsincrona_ExportarExcel.WorkerReportsProgress = false;

                //(Tarea Asincrona) ##################################################################
                obj_TareaAsincrona_ExportarExcel.RunWorkerAsync();
                //#################################################################################################

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

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

                Control_Errores.Errores_Log("", ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(Exportar_Excel));
            }
        }

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

            XLWorkbook obj_XLWorkbook = new XLWorkbook();

            try
            {
                #region Soportado
                //Crea la hoja del Excel
                var obj_worksheet_Soportado = obj_XLWorkbook.Worksheets.Add("Soportados");

                //Cabecera
                int int_Contador_Soportado = 1;

                List<DataGridViewColumn> lst_ColumnasVisibles_Soportado = g_frm_P_ResumenImpuestos.Exferia_DataGridView_Soportados.Columns
                                                                .Cast<DataGridViewColumn>()
                                                                .Where(r => r.Visible)
                                                                .OrderBy(r => r.DisplayIndex)
                                                                .ToList();

                foreach (DataGridViewColumn dgvc_Columna in lst_ColumnasVisibles_Soportado.Where(m => m.DataPropertyName != nameof(INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.Boton_Ver)))
                {
                    obj_worksheet_Soportado.Cell(1, int_Contador_Soportado).Value = dgvc_Columna.HeaderText;

                    //Formato de color al texto y al fondo
                    obj_worksheet_Soportado.Cell(1, int_Contador_Soportado).Style.Fill.BackgroundColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(Colores.G_COLOR_PRINCIPAL_BASE));
                    obj_worksheet_Soportado.Cell(1, int_Contador_Soportado).Style.Font.FontColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(Colores.G_COLOR_LISTADO_CABECERA_LETRA));
                    int_Contador_Soportado++;
                }

                //Lineas
                int int_Contador_Fila_Soportado = 0;
                int int_Contador_Columna_Soportado = 0;
                if (g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo != null)
                {
                    //Recorrer las Filas
                    foreach (dynamic dnm_Registro in g_lst_INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.OrderBy(m => m.ImpuestoCabecera).ThenBy(m => m.Delegacion).ThenBy(m => m.Fecha))
                    {
                        //Recorrer Columnas Visibles
                        foreach (DataGridViewColumn dgvc_Columna in lst_ColumnasVisibles_Soportado.Where(m => m.DataPropertyName != nameof(INTERNO_ResumenImpuestos_Soportado_Listado_Modelo.Boton_Ver)))
                        {
                            string str_NombreColumna = dgvc_Columna.Name;

                            //Buscar el modelo para poder saber que tipo de columna es
                            INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_ResumenImpuestos_Soportados.LISTADO_COLUMNAS()[str_NombreColumna];

                            if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                            {
                                //Tipo fecha
                                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                                {
                                    DateTime? dtt_Valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);

                                    if (dtt_Valor != null)
                                    {
                                        obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).SetValue(dtt_Valor.Value.ToString("dd/MM/yyyy")).Style.DateFormat.SetFormat("dd/mm/yyyy");
                                    }
                                    else
                                    {
                                        obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).Value = "";
                                    }
                                }
                                //Tipo booleano
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.BOOLEAN))
                                {
                                    bool? bol_Valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = bol_Valor != null && bol_Valor.Value ? "X" : "";

                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).SetValue(str_Valor).SetDataType(XLCellValues.Text);
                                }
                                //Tipo decimal
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL))
                                {
                                    decimal? dcm_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = (dcm_valor != null ? dcm_valor.ToString() : "").Replace(",", ".");

                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).Style.NumberFormat.Format = "0.0#?";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                                }
                                //Tipo int
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT))
                                {
                                    int? int_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = int_valor != null ? int_valor.ToString() : "";

                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).Style.NumberFormat.Format = "0";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                }
                                //Tipo long
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG))
                                {
                                    long? lng_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = lng_valor != null ? lng_valor.ToString() : "";

                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).Style.NumberFormat.Format = "0";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                }
                                //Tipo long_TExt
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT))
                                {
                                    long? lng_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna + "_Long").GetValue(dnm_Registro, null);
                                    string str_Valor = lng_valor != null ? lng_valor.ToString() : "";

                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).Style.NumberFormat.Format = "0";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                }
                                //Tipo texto
                                else
                                {
                                    string str_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);

                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).SetValue(str_valor).SetDataType(XLCellValues.Text);

                                    //Alinear los texto a la derecha
                                    obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                                }
                            }
                            else
                            {
                                obj_worksheet_Soportado.Cell(int_Contador_Fila_Soportado + 2, int_Contador_Columna_Soportado + 1).Value = "";
                            }

                            //Sumo 1 a la columna
                            int_Contador_Columna_Soportado += 1;
                        }

                        //Sumo 1 a la fila
                        int_Contador_Fila_Soportado += 1;

                        //las Columnas se reinician a 0
                        int_Contador_Columna_Soportado = 0;
                    }
                }

                //Ajusto el Excell al contenido
                obj_worksheet_Soportado.Columns().AdjustToContents();
                #endregion

                #region Repercutido
                //Crea la hoja del Excel
                var obj_worksheet_Repercutido = obj_XLWorkbook.Worksheets.Add("Repercutidos");

                //Cabecera
                int int_Contador_Repercutido = 1;

                List<DataGridViewColumn> lst_ColumnasVisibles_Repercutido = g_frm_P_ResumenImpuestos.Exferia_DataGridView_Repercutidos.Columns
                                                                .Cast<DataGridViewColumn>()
                                                                .Where(r => r.Visible)
                                                                .OrderBy(r => r.DisplayIndex)
                                                                .ToList();

                foreach (DataGridViewColumn dgvc_Columna in lst_ColumnasVisibles_Repercutido.Where(m => m.DataPropertyName != nameof(INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.Boton_Ver)))
                {
                    obj_worksheet_Repercutido.Cell(1, int_Contador_Repercutido).Value = dgvc_Columna.HeaderText;

                    //Formato de color al texto y al fondo
                    obj_worksheet_Repercutido.Cell(1, int_Contador_Repercutido).Style.Fill.BackgroundColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(Colores.G_COLOR_PRINCIPAL_BASE));
                    obj_worksheet_Repercutido.Cell(1, int_Contador_Repercutido).Style.Font.FontColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(Colores.G_COLOR_LISTADO_CABECERA_LETRA));
                    int_Contador_Repercutido++;
                }

                //Lineas
                int int_Contador_Fila_Repercutido = 0;
                int int_Contador_Columna_Repercutido = 0;
                if (g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo != null)
                {
                    //Recorrer las Filas
                    foreach (dynamic dnm_Registro in g_lst_INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.OrderBy(m => m.ImpuestoCabecera).ThenBy(m => m.Delegacion).ThenBy(m => m.Fecha))
                    {
                        //Recorrer Columnas Visibles
                        foreach (DataGridViewColumn dgvc_Columna in lst_ColumnasVisibles_Repercutido.Where(m => m.DataPropertyName != nameof(INTERNO_ResumenImpuestos_Repercutido_Listado_Modelo.Boton_Ver)))
                        {
                            string str_NombreColumna = dgvc_Columna.Name;

                            //Buscar el modelo para poder saber que tipo de columna es
                            INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_ResumenImpuestos_Repercutidos.LISTADO_COLUMNAS()[str_NombreColumna];

                            if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                            {
                                //Tipo fecha
                                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                                {
                                    DateTime? dtt_Valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);

                                    if (dtt_Valor != null)
                                    {
                                        obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).SetValue(dtt_Valor.Value.ToString("dd/MM/yyyy")).Style.DateFormat.SetFormat("dd/mm/yyyy");
                                    }
                                    else
                                    {
                                        obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).Value = "";
                                    }
                                }
                                //Tipo booleano
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.BOOLEAN))
                                {
                                    bool? bol_Valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = bol_Valor != null && bol_Valor.Value ? "X" : "";

                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).SetValue(str_Valor).SetDataType(XLCellValues.Text);
                                }
                                //Tipo decimal
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL))
                                {
                                    decimal? dcm_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = (dcm_valor != null ? dcm_valor.ToString() : "").Replace(",", ".");

                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).Style.NumberFormat.Format = "0.0#?";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                                }
                                //Tipo int
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT))
                                {
                                    int? int_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = int_valor != null ? int_valor.ToString() : "";

                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).Style.NumberFormat.Format = "0";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                }
                                //Tipo long
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG))
                                {
                                    long? lng_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = lng_valor != null ? lng_valor.ToString() : "";

                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).Style.NumberFormat.Format = "0";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                }
                                //Tipo long_TExt
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT))
                                {
                                    long? lng_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna + "_Long").GetValue(dnm_Registro, null);
                                    string str_Valor = lng_valor != null ? lng_valor.ToString() : "";

                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).Style.NumberFormat.Format = "0";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                }
                                //Tipo texto
                                else
                                {
                                    string str_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);

                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).SetValue(str_valor).SetDataType(XLCellValues.Text);

                                    //Alinear los texto a la derecha
                                    obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                                }
                            }
                            else
                            {
                                obj_worksheet_Repercutido.Cell(int_Contador_Fila_Repercutido + 2, int_Contador_Columna_Repercutido + 1).Value = "";
                            }

                            //Sumo 1 a la columna
                            int_Contador_Columna_Repercutido += 1;
                        }

                        //Sumo 1 a la fila
                        int_Contador_Fila_Repercutido += 1;

                        //las Columnas se reinician a 0
                        int_Contador_Columna_Repercutido = 0;
                    }
                }

                //Ajusto el Excell al contenido
                obj_worksheet_Repercutido.Columns().AdjustToContents();
                #endregion

                #region Resumen
                //Crea la hoja del Excel
                var obj_worksheet_Resumen = obj_XLWorkbook.Worksheets.Add("Resumen");

                //Cabecera
                int int_Contador_Resumen = 1;
                List<DataGridViewColumn> lst_ColumnasVisibles_Resumen = g_frm_P_ResumenImpuestos.Exferia_DataGridView_Resumen.Columns
                                                                .Cast<DataGridViewColumn>()
                                                                .Where(r => r.Visible)
                                                                .OrderBy(r => r.DisplayIndex)
                                                                .ToList();
                //Añadir la Columna Tipo de Linea
                obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Value = "Tipo de linea";
                obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Fill.BackgroundColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(Colores.G_COLOR_PRINCIPAL_BASE));
                obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Font.FontColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(Colores.G_COLOR_LISTADO_CABECERA_LETRA));
                obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Border.TopBorder = XLBorderStyleValues.Thin;
                obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Border.LeftBorder = XLBorderStyleValues.Thin;
                obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Border.RightBorder = XLBorderStyleValues.Thin;
                obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Border.BottomBorder = XLBorderStyleValues.Thin;
                int_Contador_Resumen++;

                //Resto de Columnas
                foreach (DataGridViewColumn dgvc_Columna in lst_ColumnasVisibles_Resumen)
                {
                    obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Value = g_obj_ABS_Listado_ResumenImpuestos.LISTADO_COLUMNAS().Where(m => m.Key == dgvc_Columna.Name).FirstOrDefault().Value.Descripcion_AMostrar;

                    //Formato de color al texto y al fondo
                    obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Fill.BackgroundColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(Colores.G_COLOR_PRINCIPAL_BASE));
                    obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Font.FontColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(Colores.G_COLOR_LISTADO_CABECERA_LETRA));
                    obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Border.TopBorder = XLBorderStyleValues.Thin;
                    obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Border.LeftBorder = XLBorderStyleValues.Thin;
                    obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Border.RightBorder = XLBorderStyleValues.Thin;
                    obj_worksheet_Resumen.Cell(1, int_Contador_Resumen).Style.Border.BottomBorder = XLBorderStyleValues.Thin;
                    int_Contador_Resumen++;
                }

                //Lineas
                int int_Contador_Fila_Resumen = 0;
                int int_Contador_Columna_Resumen = 0;
                if (g_lst_INTERNO_ResumenImpuestos_Listado_Modelo != null)
                {
                    Color clr_Fondo = Color.White;
                    Color clr_Letra = Color.Black;

                    //Recorrer las Filas
                    foreach (dynamic dnm_Registro in g_lst_INTERNO_ResumenImpuestos_Listado_Modelo)
                    {
                        string str_valor_TipoLinea = dnm_Registro != null && dnm_Registro.GetType().GetProperty(nameof(INTERNO_ResumenImpuestos_Listado_Modelo.TipoLineaParaInforme)).GetValue(dnm_Registro, null) != null ? dnm_Registro.GetType().GetProperty(nameof(INTERNO_ResumenImpuestos_Listado_Modelo.TipoLineaParaInforme)).GetValue(dnm_Registro, null) : "";

                        //Tipo de registro pa saber que color poner
                        if (str_valor_TipoLinea == g_str_TipoLinea_Soportado_SumaNaturaleza ||
                            str_valor_TipoLinea == g_str_TipoLinea_Soportado_SumaDelegacion ||
                            str_valor_TipoLinea == g_str_TipoLinea_Soportado_SumaTablaImpuestos ||
                            
                            str_valor_TipoLinea == g_str_TipoLinea_Repercutido_SumaNaturaleza ||
                            str_valor_TipoLinea == g_str_TipoLinea_Repercutido_SumaDelegacion ||
                            str_valor_TipoLinea == g_str_TipoLinea_Repercutido_SumaTablaImpuestos)
                        {
                            clr_Fondo = Colores.G_COLOR_LISTADO_TOTALES_FONDO;
                            clr_Letra = Colores.G_COLOR_LISTADO_TOTALES_LETRA;
                        }
                        else if (str_valor_TipoLinea == g_str_TipoLinea_Soportado_Tipo ||
                                 str_valor_TipoLinea == g_str_TipoLinea_Soportado_SumaTipo ||
                                 str_valor_TipoLinea == g_str_TipoLinea_Repercutido_Tipo ||
                                 str_valor_TipoLinea == g_str_TipoLinea_Repercutido_SumaTipo ||
                                 str_valor_TipoLinea == g_str_TipoLinea_Resumen)
                        {
                            clr_Fondo = Color.Black;
                            clr_Letra = Color.White;
                        }
                        else
                        {
                            clr_Fondo = Color.White;
                            clr_Letra = Color.Black;
                        }

                        //Añadir la Columna Tipo de Linea
                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).SetValue(str_valor_TipoLinea).SetDataType(XLCellValues.Text);
                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Fill.BackgroundColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(clr_Fondo));
                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Font.FontColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(clr_Letra));
                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Border.TopBorder = XLBorderStyleValues.Thin;
                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Border.LeftBorder = XLBorderStyleValues.Thin;
                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Border.RightBorder = XLBorderStyleValues.Thin;
                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Border.BottomBorder = XLBorderStyleValues.Thin;
                        //Sumo 1 a la columna
                        int_Contador_Columna_Resumen += 1;

                        //Recorrer Columnas Visibles
                        foreach (DataGridViewColumn dgvc_Columna in lst_ColumnasVisibles_Resumen)
                        {
                            string str_NombreColumna = dgvc_Columna.Name;

                            //Buscar el modelo para poder saber que tipo de columna es
                            INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_ResumenImpuestos.LISTADO_COLUMNAS()[str_NombreColumna];

                            if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                            {
                                //Tipo fecha
                                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                                {
                                    DateTime? dtt_Valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);

                                    if (dtt_Valor != null)
                                    {
                                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).SetValue(dtt_Valor.Value.ToString("dd/MM/yyyy")).Style.DateFormat.SetFormat("dd/mm/yyyy");
                                    }
                                    else
                                    {
                                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Value = "";
                                    }
                                }
                                //Tipo booleano
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.BOOLEAN))
                                {
                                    bool? bol_Valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = bol_Valor != null && bol_Valor.Value ? "X" : "";

                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).SetValue(str_Valor).SetDataType(XLCellValues.Text);
                                }
                                //Tipo decimal
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL))
                                {
                                    decimal? dcm_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = (dcm_valor != null ? dcm_valor.ToString() : "").Replace(",", ".");

                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.NumberFormat.Format = "0.0#?";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                                }
                                //Tipo int
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT))
                                {
                                    int? int_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = int_valor != null ? int_valor.ToString() : "";

                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.NumberFormat.Format = "0";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                }
                                //Tipo long
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG))
                                {
                                    long? lng_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                    string str_Valor = lng_valor != null ? lng_valor.ToString() : "";

                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.NumberFormat.Format = "0";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                }
                                //Tipo long_TExt
                                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT))
                                {
                                    long? lng_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna + "_Long").GetValue(dnm_Registro, null);
                                    string str_Valor = lng_valor != null ? lng_valor.ToString() : "";

                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.NumberFormat.Format = "0";

                                    //Alinear los numeros a la derecha
                                    obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                }
                                //Tipo texto
                                else
                                {
                                    if (dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null) != null)
                                    {
                                        //Es decimal
                                        bool bol_Decimal = false;
                                        try
                                        {
                                            decimal? dcm_valor = dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null);
                                            string str_Valor = (dcm_valor != null ? dcm_valor.ToString() : "").Replace(",", ".");

                                            obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).SetValue(str_Valor).SetDataType(XLCellValues.Number);
                                            obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.NumberFormat.Format = "0.0#?";

                                            //Alinear los numeros a la derecha
                                            obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                            bol_Decimal = true;
                                        }
                                        catch (Exception)
                                        {
                                            bol_Decimal = false;
                                        }

                                        if (bol_Decimal == false)
                                        {
                                            string str_valor = dnm_Registro != null && dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null) != null ? dnm_Registro.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(dnm_Registro, null) : "";

                                            obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).SetValue(str_valor).SetDataType(XLCellValues.Text);

                                            //Alinear los texto a la derecha
                                            obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                                        }
                                    }
                                    else
                                    {
                                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).SetValue("").SetDataType(XLCellValues.Text);

                                        //Alinear los texto a la derecha
                                        obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                                    }
                                }
                            }
                            else
                            {
                                obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Value = "";
                            }

                            obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Fill.BackgroundColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(clr_Fondo));
                            obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Font.FontColor = XLColor.FromHtml(Funciones.Convertir_Color_Hexadecimal(clr_Letra));
                            obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Border.TopBorder = XLBorderStyleValues.Thin;
                            obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Border.LeftBorder = XLBorderStyleValues.Thin;
                            obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Border.RightBorder = XLBorderStyleValues.Thin;
                            obj_worksheet_Resumen.Cell(int_Contador_Fila_Resumen + 2, int_Contador_Columna_Resumen + 1).Style.Border.BottomBorder = XLBorderStyleValues.Thin;

                            //Sumo 1 a la columna
                            int_Contador_Columna_Resumen += 1;
                        }

                        //Sumo 1 a la fila
                        int_Contador_Fila_Resumen += 1;

                        //las Columnas se reinician a 0
                        int_Contador_Columna_Resumen = 0;
                    }
                }

                //Ajusto el Excell al contenido
                obj_worksheet_Resumen.Columns().AdjustToContents();
                #endregion

                mdl_INTERNO_ValorDevuelto_Modelo.Objeto_Auxiliar_1 = obj_XLWorkbook;
            }
            catch (ThreadAbortException ex)
            {
                obj_XLWorkbook.Dispose();

                Control_Errores.Errores_Log("", ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(TareaAsincrona_ExportarExcel_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS();
            }
            catch (Control_Errores)
            {
                obj_XLWorkbook.Dispose();

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

                Control_Errores.Errores_Log("", ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(TareaAsincrona_ExportarExcel_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS();
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_ExportarExcel_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            //Desbloquear el formulario
            g_frm_P_ResumenImpuestos.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_ResumenImpuestos.Salir_P_Base();
                }
                else
                {
                    XLWorkbook obj_XLWorkbook = (XLWorkbook)mdl_ValorDevuelto_Modelo_Resultado.Objeto_Auxiliar_1;

                    //Abro un dialog para Guardar
                    SaveFileDialog obj_SaveFileDialog = new SaveFileDialog();

                    string str_Ruta = "";
                    INF_Rutas mdl_INF_Rutas = Variables.G_LST_RUTAS.Where(m => m.id.Equals(Variables.G_LNG_RUTA_EXCEL)).FirstOrDefault();
                    if (mdl_INF_Rutas != null && mdl_INF_Rutas.rutaFichero != null && mdl_INF_Rutas.nombreFichero != null)
                    {
                        List<INTERNO_CodigoDescripcion_Modelo> lst_INTERNO_CodigoDescripcion_Modelo = new List<INTERNO_CodigoDescripcion_Modelo>();
                        lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_CODIGO_EMPRESA.Codigo, g_frm_P_ResumenImpuestos.P_Base_ValoresGenerales.str_Empresa_Codigo));
                        lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_FECHA.Codigo, g_frm_P_ResumenImpuestos.P_Base_FechaTrabajo.ToString("yyyyMMdd")));
                        lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_HORA.Codigo, g_frm_P_ResumenImpuestos.P_Base_FechaTrabajo.ToString("HHmmss")));
                        lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_EJERCICIO.Codigo, g_frm_P_ResumenImpuestos.P_Base_ValoresGenerales.EjercicioActivo.anioControl));
                        lst_INTERNO_CodigoDescripcion_Modelo.Add(new INTERNO_CodigoDescripcion_Modelo(Variables.G_MDL_PARAMETRO_RUTA_FICHERO.Codigo, "ResumenImpuestos"));

                        str_Ruta = Funciones.Transformar_Ruta(mdl_INF_Rutas.rutaFichero, mdl_INF_Rutas.nombreFichero, ".xlsx", lst_INTERNO_CodigoDescripcion_Modelo);
                    }

                    if (str_Ruta.Trim().Length > 0)
                    {
                        int int_Posicion_NombreFichero = str_Ruta.LastIndexOf(@"\");

                        obj_SaveFileDialog.InitialDirectory = str_Ruta.Substring(0, int_Posicion_NombreFichero);


                        obj_SaveFileDialog.FileName = str_Ruta.Substring(int_Posicion_NombreFichero + 1, str_Ruta.Length - (int_Posicion_NombreFichero + 1));
                    }

                    obj_SaveFileDialog.Filter = "Excel (*.xlsx)|*.xlsx";
                    obj_SaveFileDialog.Title = "Excel";

                    if (obj_SaveFileDialog.ShowDialog() == DialogResult.OK)
                    {
                        //Guardo el Excell
                        obj_XLWorkbook.SaveAs(obj_SaveFileDialog.FileName);

                        Mensajes.MostrarMensaje_Ruta(Mensajes.G_STR_MENSAJES_GENERAL_EXPORTAREXCEL_CORRECTO(), obj_SaveFileDialog.FileName);
                    }
                }
            }
            catch (Exception ex)
            {

                Control_Errores.Errores_Log("", ex, nameof(P_ResumenImpuestos_Controladora) + "/" + nameof(TareaAsincrona_ExportarExcel_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS());
            }
        }
        #endregion
    }
}
