private Boolean Grabacion_Niveles(List <ct_Plancta_Info> lista)
        {
            Boolean respuesta = false;

            try
            {
                ct_Plancta_nivel_Bus         BusNivel    = new ct_Plancta_nivel_Bus();
                List <ct_Plancta_nivel_Info> ListNiveles = new List <ct_Plancta_nivel_Info>();


                var results = from p in lista
                              group new { p.IdEmpresa, p.IdNivelCta, num_digitos = p.IdCtaCble.Length } by p into grupo
                orderby grupo.Key
                select grupo;

                foreach (var item in results)
                {
                    ct_Plancta_nivel_Info Info = new ct_Plancta_nivel_Info();
                    Info.IdEmpresa      = item.Key.IdEmpresa;
                    Info.IdNivelCta     = item.Key.IdNivelCta;
                    Info.nv_Descripcion = "Nivel " + item.Key.IdNivelCta;
                    Info.nv_NumDigitos  = 0;

                    //ListNiveles.Add(Info);
                }



                for (int i = ListNiveles.Count(); i < 0; i--)
                {
                }


                respuesta = BusNivel.GrabarDB(ListNiveles);

                return(respuesta);
            }
            catch (Exception ex)
            {
                lblMensaje.Text    = "Error al cargar " + ex.ToString();
                lblMensaje.Visible = true;
                return(respuesta);
            }
        }
        private void Grabar()
        {
            try
            {
                get_PlanCtaNivel();

                if (_PlanCtaNivel_bus.GrabarDB(_PlanCtaNivel_info))
                {
                    string smensaje = string.Format(Core.Erp.Recursos.Properties.Resources.msgDespues_Grabar, "El Nivel ", _PlanCtaNivel_info.IdNivelCta);
                    MessageBox.Show(smensaje, param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LimpiarDatos();
                }
                else
                {
                    string smensaje = string.Format(Core.Erp.Recursos.Properties.Resources.msgError_Grabar);
                    MessageBox.Show(smensaje, param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                Log_Error_bus.Log_Error(ex.ToString());
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private Boolean Proceso_Grabacion()
        {
            Boolean respuesta   = false;
            int     c           = 1;
            int     Total_Reg   = 0;
            string  IdCta       = "";
            string  IdCta_Padre = "";
            string  Nom_cta     = "";

            BindingList <cl_estado_grabacion> ListEstadoGrabacion = new BindingList <cl_estado_grabacion>();

            try
            {
                string MensajeLog     = "Ingreso Exitoso.";
                string MensajeWarning = "";
                string listaLog       = "";
                this.rtbLog.Text = "";
                bool B_Proceso_anulacion = true;
                lblMensaje.Text    = "";
                lblMensaje.Visible = false;

                gridControlProceGrabado.DataSource = ListEstadoGrabacion;


                if (treeListPlanCta.DataSource != null)
                {
                    if (rgImportar.SelectedIndex == 0)
                    {
                        MensajeWarning = "Atención esta a punto de eliminar toda la información actual, y reemplazarla con la nueva. Está seguro de continuar?";
                    }
                    else
                    {
                        MensajeWarning = "Atención esta a punto de proceder. Está seguro de continuar?";
                    }
                    lblmsg3.Visible = true;


                    if (MessageBox.Show(MensajeWarning, "SISTEMAS", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
                    {
                        if (rgImportar.SelectedIndex == 0)
                        {
                            splashScreenManager.ShowWaitForm();


                            B_Proceso_anulacion = _PlanCtaBus.EliminarDB(param.IdEmpresa, ref MensajeError);

                            if (B_Proceso_anulacion)
                            {
                                ListEstadoGrabacion.Add(new cl_estado_grabacion(0, "", "Eliminado Plan de cuenta", "", "OK", "Eliminado Ok"));
                                gridControlProceGrabado.Refresh();
                            }


                            splashScreenManager.CloseWaitForm();
                        }


                        if (B_Proceso_anulacion == true)
                        {
                            splashScreenManager.ShowWaitForm();


                            Total_Reg            = _ListPlanCtaInfo.Count();
                            progressBar.Maximum  = Total_Reg;
                            progressBar.Minimum  = 1;
                            progressBar.Step     = 1;
                            lblNumRegistros.Text = "0 registros de " + Total_Reg;
                            c = 1;

                            ct_Plancta_nivel_Bus         BusPlan_nivel    = new ct_Plancta_nivel_Bus();
                            List <ct_Plancta_nivel_Info> list_niveles     = new List <ct_Plancta_nivel_Info>();
                            List <ct_Plancta_nivel_Info> list_niveles_Aux = new List <ct_Plancta_nivel_Info>();



                            var QNiveles = from Cb in _ListPlanCtaInfo
                                           orderby Cb.IdNivelCta descending
                                           group Cb by new { Cb.IdEmpresa, Cb.IdNivelCta, Cb.IdCtaCble.Length }
                            into grouping
                                select new { grouping.Key };

                            if (QNiveles.Count() > 0)
                            {
                                foreach (var item in QNiveles)
                                {
                                    ct_Plancta_nivel_Info InfoPlan_nivel = new ct_Plancta_nivel_Info();
                                    InfoPlan_nivel.IdEmpresa      = item.Key.IdEmpresa;
                                    InfoPlan_nivel.IdNivelCta     = item.Key.IdNivelCta;
                                    InfoPlan_nivel.nv_Descripcion = "Nivel " + item.Key.IdNivelCta;;
                                    InfoPlan_nivel.nv_NumDigitos  = item.Key.Length;
                                    InfoPlan_nivel.Estado         = "A";
                                    list_niveles_Aux.Add(InfoPlan_nivel);
                                }
                            }

                            // recorre desde el nivel mas grande hasta el nivel mas pequeño
                            foreach (var item in list_niveles_Aux)
                            {
                                int num_Digito_x_Nivel_Actual   = 0;
                                int num_Digito_x_Nivel_Anterior = 0;

                                ct_Plancta_nivel_Info InfoPlan_nivel_Anterior = list_niveles_Aux.FirstOrDefault(v => v.IdNivelCta == item.IdNivelCta - 1);

                                num_Digito_x_Nivel_Anterior = (InfoPlan_nivel_Anterior == null) ? 0 : InfoPlan_nivel_Anterior.nv_NumDigitos;
                                num_Digito_x_Nivel_Actual   = item.nv_NumDigitos - num_Digito_x_Nivel_Anterior;

                                ct_Plancta_nivel_Info InfoPlan_nivel = new ct_Plancta_nivel_Info();
                                InfoPlan_nivel.IdEmpresa      = item.IdEmpresa;
                                InfoPlan_nivel.IdNivelCta     = item.IdNivelCta;
                                InfoPlan_nivel.nv_Descripcion = item.nv_Descripcion;
                                InfoPlan_nivel.nv_NumDigitos  = num_Digito_x_Nivel_Actual;
                                InfoPlan_nivel.Estado         = "A";
                                list_niveles.Add(InfoPlan_nivel);
                            }

                            //BusPlan_nivel.EliminarDB(param.IdEmpresa);
                            BusPlan_nivel.GrabarDB(list_niveles);


                            foreach (ct_Plancta_Info item in _ListPlanCtaInfo)
                            {
                                IdCta          = item.IdCtaCble;
                                Nom_cta        = item.pc_Cuenta;
                                IdCta_Padre    = item.IdCtaCblePadre;
                                item.IdUsuario = "migrado2";

                                respuesta = _PlanCtaBus.GrabarDB(item, ref MensajeError);
                                if (respuesta)
                                {
                                    ListEstadoGrabacion.Add(new cl_estado_grabacion(c, item.IdCtaCble, item.pc_Cuenta, IdCta_Padre, "OK", "Migrado Ok"));
                                    gridControlProceGrabado.Refresh();
                                    progressBar.Value    = c;
                                    lblNumRegistros.Text = c + " registros de " + Total_Reg;
                                    progressBar.Refresh();
                                    Application.DoEvents();
                                }

                                c++;
                            }

                            if (listaLog != "")
                            {
                                MensajeLog += " pero con errores:" + "\n" + listaLog + MensajeError;
                            }
                        }
                    }
                    else
                    {
                        MensajeLog = "No se efectuó la operación. Operación cancelada por el usuario.";
                    }
                    lblmsg3.Visible = false;
                }
                else
                {
                    MensajeLog = "No existen Datos para importación.";
                }
                this.rtbLog.Text = MensajeLog;


                splashScreenManager.CloseWaitForm();

                return(respuesta);
            }
            catch (Exception ex)
            {
                splashScreenManager.CloseWaitForm();
                ListEstadoGrabacion.Add(new cl_estado_grabacion(c++, IdCta, Nom_cta, IdCta_Padre, "ERROR", "No Migrado:" + ex.ToString()));
                gridControlProceGrabado.Refresh();
                lblMensaje.Text    = "Error al cargar " + ex.ToString();
                lblMensaje.Visible = true;
                return(respuesta);
            }
        }