public static void CamposTransaccionxEtapa(ref CamposTransaccion campos)
        {
            SqlConnection connection        = null;
            DataTable     CamposComplemento = new DataTable();
            List <Entidades.CampCabecera> ListaCamposComplementoCab = new List <Entidades.CampCabecera>();
            List <Entidades.CampDetalle>  ListaCamposComplementoDet = new List <Entidades.CampDetalle>();
            SqlDataReader consulta;

            try
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("idCampo");
                dt.Columns.Add("idnivel");
                dt.Columns.Add("nombreCampo");
                dt.Columns.Add("descripcionCampo");
                dt.Columns.Add("tipoDato");
                dt.Columns.Add("visualisacion");
                dt.Columns.Add("tipoOperacion");
                dt.Columns.Add("activo");
                dt.Columns.Add("longitudCampo");
                dt.Columns.Add("visible");
                dt.Columns.Add("editable");
                dt.Columns.Add("obligatorio");
                dt.Columns.Add("CadenaComplementos");
                dt.Columns.Add("formula");
                dt.Columns.Add("TipoTransaccion").DataType = typeof(string);
                dt.Columns.Add("IdReferencia");
                dt.Columns.Add("NombreReferencia");
//                dt.Columns["TipoTransaccion"].DataType = typeof(Int64);
                using (connection = Conexion.ObtieneConexion("ConexionBD"))
                {
                    connection.Open();

                    consulta = Ejecuta.ConsultaConRetorno(connection, "SELECT DISTINCT CDT.idCampo,"
                                                          + " CDT.idNivel,"
                                                          + " nombreCampo,"
                                                          + " CDT.descripcion AS descripcionCampo,"
                                                          + " TDC.descripcion as tipoDato,"
                                                          + " TIP.descripcion as tipoOperacion"
                                                          + " , CDT.[activo]"
                                                          + " ,[longitudCampo]"
                                                          + " ,[visible]"
                                                          + " ,[editable]"
                                                          + " , (select    CASE"
                                                          + " WHEN([obligatorio]) = 1 THEN 'required'"
                                                          + " WHEN([obligatorio]) = 0 THEN ''"
                                                          + " END ) as obligatorio"
                                                          + " , F.cadenaGenerada as formula"
                                                          + " , VTT.componente AS visualisacion, "
                                                          + " RNCT.idTipoTransaccionReferencia as TipoTransaccion,"
                                                          + " RNCT.cadenaJsonHijos as CadenaComplementos,"
                                                          + " RNCT.idReferencia as IdReferencia,"
                                                          + " RNCT.nombreReferencia as NombreReferencia"
                                                          + " FROM"
                                                          + " Configuracion.TiposTransacciones TT"
                                                          + " INNER JOIN Configuracion.CamposDinamicosTransacciones CDT"
                                                          + " ON CDT.idTipoTransaccion = TT.idTipoTransaccion"
                                                          + " INNER JOIN Configuracion.NivelTransacciones NT ON"
                                                          + " NT.idNivel = CDT.idNivel"
                                                          + " INNER JOIN Configuracion.TiposDatoCampos TDC"
                                                          + " ON TDC.idTipoDatoCampo = CDT.idTipoDatoCampo"
                                                          + " INNER JOIN Configuracion.CategoriaTipoTransaccion CT"
                                                          + " ON CT.idCatTipoTransac = TT.idCatTipoTransac"
                                                          + " INNER JOIN Configuracion.TiposOperaciones TIP"
                                                          + " ON TIP.idTipoOperacion = CDT.idTipoOperacion"
                                                          + " INNER JOIN Configuracion.ReglasNegocioCamposxTipoTransaccion RNCT"
                                                          + " ON RNCT.idTipoTransaccion = TT.idTipoTransaccion"
                                                          + " AND RNCT.idTipoTransaccion = CDT.idTipoTransaccion"
                                                          + " AND RNCT.idCampo = CDT.idCampo"
                                                          + " INNER JOIN Configuracion.VisualizacionTipoTransacciones VTT"
                                                          + " ON VTT.idVisualizacion = RNCT.idVisualizacion"
                                                          + " left join Configuracion.Formulas F"
                                                          + " on f.idTipoTransaccion = TT.idTipoTransaccion"
                                                          + " and f.idCampo = CDT.idCampo"
                                                          + " INNER JOIN Configuracion.EtapasAccionesTipoTransacciones EATT"
                                                          + " ON EATT.idEtapa = RNCT.idEtapa"
                                                          + " AND EATT.idTipoTransaccion = RNCT.idTipoTransaccion"
                                                          + " INNER JOIN Configuracion.EtapasTipoTransaccion ETT"
                                                          + " ON ETT.idEtapa = RNCT.idEtapa"
                                                          + " AND ETT.idTipoTransaccion = RNCT.idTipoTransaccion"
                                                          + " INNER JOIN Configuracion.AccionesTipoTransaccion ATT"
                                                          + " ON ATT.idAccion = EATT.idAccion"
                                                          + " AND ATT.idTipoTransaccion = RNCT.idTipoTransaccion"
                                                          + " INNER JOIN Configuracion.MAETransacciones MAE"
                                                          + " ON MAE.idTipoTransaccion = TT.idTipoTransaccion"
                                                          + " WHERE MAE.idTransaccion = '" + campos.idTrasaccion + "'"
                                                          + " AND RNCT.visible = 1 AND EATT.idEtapa <> (SELECT idEtapa FROM Configuracion.MAETransacciones WHERE idTransaccion = '" + campos.idTrasaccion + "')");
                    CamposComplemento.Load(consulta);
                    connection.Close();

                    if (CamposComplemento.Rows.Count > 0)
                    {
                        DataRow newRow = dt.NewRow();
                        newRow["idCampo"]            = "1";
                        newRow["idnivel"]            = "2";
                        newRow["nombreCampo"]        = "Idrows";
                        newRow["descripcionCampo"]   = "Identificador";
                        newRow["tipoDato"]           = "Text";
                        newRow["visualisacion"]      = "combobox";
                        newRow["tipoOperacion"]      = "CampoAbierto";
                        newRow["activo"]             = "True";
                        newRow["longitudCampo"]      = "50";
                        newRow["visible"]            = "True";
                        newRow["editable"]           = "True";
                        newRow["obligatorio"]        = "required";
                        newRow["CadenaComplementos"] = "";
                        newRow["formula"]            = "";
                        newRow["TipoTransaccion"]    = campos.idTrasaccion;
                        newRow["IdReferencia"]       = "idrow";
                        newRow["NombreReferencia"]   = "idrow";
                        dt.Rows.Add(newRow);

                        foreach (DataRow row in CamposComplemento.Rows)
                        {
                            DataRow rows = dt.NewRow();

                            rows["idCampo"]            = row["idCampo"];
                            rows["idnivel"]            = row["idnivel"];
                            rows["nombreCampo"]        = row["nombreCampo"];
                            rows["descripcionCampo"]   = row["descripcionCampo"];
                            rows["tipoDato"]           = row["tipoDato"];
                            rows["visualisacion"]      = row["visualisacion"];
                            rows["tipoOperacion"]      = row["tipoOperacion"];
                            rows["activo"]             = row["activo"];
                            rows["longitudCampo"]      = row["longitudCampo"];
                            rows["visible"]            = row["visible"];
                            rows["editable"]           = row["editable"];
                            rows["obligatorio"]        = row["obligatorio"];
                            rows["CadenaComplementos"] = row["CadenaComplementos"];
                            rows["formula"]            = row["formula"];
                            rows["TipoTransaccion"]    = row["TipoTransaccion"];
                            rows["IdReferencia"]       = row["IdReferencia"];
                            rows["NombreReferencia"]   = row["NombreReferencia"];

                            dt.Rows.Add(rows);
                        }



                        DataSet dtCampos = new DataSet();

                        dtCampos.Tables.Add(CamposComplemento);



                        //Datos Cabecera

                        if (1 == (int)nivel.cabecera)
                        {
                            foreach (DataRow Campo in dt.Rows)
                            {
                                if ((Convert.ToInt32(Campo["idnivel"].ToString())) == (int)Entidades.nivel.cabecera)
                                {
                                    Entidades.CampCabecera CampoCabecera = new Entidades.CampCabecera();
                                    //Transact.Entidades
                                    CampoCabecera.idCampo          = Convert.ToInt32(Campo["idCampo"].ToString());
                                    CampoCabecera.idnivel          = Convert.ToInt32(Campo["idnivel"].ToString());
                                    CampoCabecera.nombreCampo      = Campo["nombreCampo"].ToString();
                                    CampoCabecera.descripcionCampo = Campo["descripcionCampo"].ToString();
                                    CampoCabecera.TipoDatoCampo    = Campo["tipoDato"].ToString();
                                    CampoCabecera.Visualisacion    = Campo["visualisacion"].ToString();
                                    CampoCabecera.TipoOperacion    = Campo["tipoOperacion"].ToString();
                                    CampoCabecera.activo           = Convert.ToBoolean(Campo["activo"].ToString());
                                    CampoCabecera.logitudCampo     = Convert.ToDouble(Campo["longitudCampo"].ToString());
                                    CampoCabecera.visible          = Convert.ToBoolean(Campo["visible"].ToString());
                                    CampoCabecera.editable         = Convert.ToBoolean(Campo["editable"].ToString());
                                    CampoCabecera.obligatorio      = Campo["obligatorio"].ToString();
                                    if (Campo["CadenaComplementos"].ToString() != "")
                                    {
                                        CampoCabecera.CadenaComplementos = Campo["CadenaComplementos"].ToString();
                                    }
                                    if (Campo["formula"].ToString() != "")
                                    {
                                        CampoCabecera.formula = Campo["formula"].ToString();
                                    }
                                    if (Campo["TipoTransaccion"].ToString() != "")
                                    {
                                        CampoCabecera.TransaccionReferencia = Campo["TipoTransaccion"].ToString();
                                        CampoCabecera.idRef  = Campo["IdReferencia"].ToString();
                                        CampoCabecera.nomRef = Campo["NombreReferencia"].ToString();
                                    }
                                    ListaCamposComplementoCab.Add(CampoCabecera);
                                }
                                if ((Convert.ToInt32(Campo["idnivel"].ToString())) == (int)Entidades.nivel.detalle)
                                {
                                    Entidades.CampDetalle CampoDet = new Entidades.CampDetalle();
                                    CampoDet.idCampo          = Convert.ToInt32(Campo["idCampo"].ToString());
                                    CampoDet.idnivel          = Convert.ToInt32(Campo["idnivel"].ToString());
                                    CampoDet.nombreCampo      = Campo["nombreCampo"].ToString();
                                    CampoDet.descripcionCampo = Campo["descripcionCampo"].ToString();
                                    CampoDet.TipoDatoCampo    = Campo["tipoDato"].ToString();
                                    CampoDet.Visualisacion    = Campo["visualisacion"].ToString();
                                    CampoDet.TipoOperacion    = Campo["tipoOperacion"].ToString();
                                    CampoDet.activo           = Convert.ToBoolean(Campo["activo"].ToString());
                                    CampoDet.logitudCampo     = Convert.ToDouble(Campo["longitudCampo"].ToString());
                                    CampoDet.visible          = Convert.ToBoolean(Campo["visible"].ToString());
                                    CampoDet.editable         = Convert.ToBoolean(Campo["editable"].ToString());
                                    CampoDet.obligatorio      = Campo["obligatorio"].ToString();
                                    if (Campo["CadenaComplementos"].ToString() != "")
                                    {
                                        CampoDet.CadenaComplementos = Campo["CadenaComplementos"].ToString();
                                    }
                                    if (Campo["formula"].ToString() != "")
                                    {
                                        CampoDet.formula = Campo["formula"].ToString();
                                    }

                                    if (Campo["TipoTransaccion"].ToString() != "")
                                    {
                                        CampoDet.TransaccionReferencia = Campo["TipoTransaccion"].ToString();
                                        CampoDet.idRef  = Campo["IdReferencia"].ToString();
                                        CampoDet.nomRef = Campo["NombreReferencia"].ToString();
                                    }
                                    ListaCamposComplementoDet.Add(CampoDet);
                                }
                            }
                        }
                        campos.CamposCabecera = ListaCamposComplementoCab.ToArray();
                        campos.CamposDetalle  = ListaCamposComplementoDet.ToArray();
                    }
                    else
                    {
                        campos.CamposCabecera = ListaCamposComplementoCab.ToArray();
                        campos.CamposDetalle  = ListaCamposComplementoDet.ToArray();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("" + ex.Message, ex);
                throw;
            }
        }
        public static void CamposTransaccion(ref Entidades.CamposTransaccion campos)
        {
            SqlConnection connection        = null;
            DataTable     CamposComplemento = new DataTable();

            Console.WriteLine(CamposComplemento);
            List <Entidades.CampCabecera> ListaCamposComplementoCab = new List <Entidades.CampCabecera>();
            List <Entidades.CampDetalle>  ListaCamposComplementoDet = new List <Entidades.CampDetalle>();

            try
            {
                using (connection = Conexion.ObtieneConexion("ConexionBD"))
                {
                    var parametros = new[]
                    {
                        ParametroAcceso.CrearParametro("@idTransaccion", SqlDbType.Int, campos.idTipoTrasaccion, ParameterDirection.Input)
                    };
                    connection.Open();
                    CamposComplemento = Ejecuta.EjecutarConsulta(connection, parametros, "[dbo].[SpObtener_x_Transacciones]");
                    connection.Close();
                    if (CamposComplemento.Rows.Count > 0)
                    {
                        DataSet dtCampos = new DataSet();

                        dtCampos.Tables.Add(CamposComplemento);

                        //Datos Cabecera

                        if (1 == (int)Entidades.nivel.cabecera)
                        {
                            foreach (DataRow Campo in CamposComplemento.Rows)
                            {
                                if ((Convert.ToInt32(Campo["idnivel"].ToString())) == (int)Entidades.nivel.cabecera)
                                {
                                    Entidades.CampCabecera CampoCabecera = new Entidades.CampCabecera();
                                    CampoCabecera.idCampo       = Convert.ToInt32(Campo["idCampo"].ToString());
                                    CampoCabecera.idnivel       = Convert.ToInt32(Campo["idnivel"].ToString());
                                    CampoCabecera.nombreCampo   = Campo["nombreCampo"].ToString();
                                    CampoCabecera.TipoDatoCampo = Campo["idTipoDatoCampo"].ToString();
                                    CampoCabecera.TipoOperacion = Campo["idTipoOperacion"].ToString();
                                    CampoCabecera.activo        = Convert.ToBoolean(Campo["activo"].ToString());

                                    ListaCamposComplementoCab.Add(CampoCabecera);
                                }
                                if ((Convert.ToInt32(Campo["idnivel"].ToString())) == (int)Entidades.nivel.detalle)
                                {
                                    Entidades.CampDetalle CampoDet = new Entidades.CampDetalle();
                                    CampoDet.idCampo       = Convert.ToInt32(Campo["idCampo"].ToString());
                                    CampoDet.idnivel       = Convert.ToInt32(Campo["idnivel"].ToString());
                                    CampoDet.nombreCampo   = Campo["nombreCampo"].ToString();
                                    CampoDet.TipoDatoCampo = Campo["idTipoDatoCampo"].ToString();
                                    CampoDet.TipoOperacion = Campo["idTipoOperacion"].ToString();
                                    CampoDet.activo        = Convert.ToBoolean(Campo["activo"].ToString());

                                    ListaCamposComplementoDet.Add(CampoDet);
                                }
                            }
                        }
                        campos.CamposCabecera = ListaCamposComplementoCab.ToArray();
                        campos.CamposDetalle  = ListaCamposComplementoDet.ToArray();
                    }
                    else
                    {
                        campos.CamposCabecera = ListaCamposComplementoCab.ToArray();
                        campos.CamposDetalle  = ListaCamposComplementoDet.ToArray();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                throw;
            }
        }