Ejemplo n.º 1
0
        public void Retorno_BB()
        {
            LayoutBancos r = new LayoutBancos();

            r.Init(Cedente);

            // Registro tipo 7
            string cFileRET = File.ReadAllText(@"..\..\TXT\Retorno_BB.txt");

            r.ErroType = BoletoDuplicado.Lista;
            Layout ret = r.Retorno(cFileRET);

            // Ou usa-se o array de boletos
            foreach (string nn in r.Boletos.NossoNumeros)
            {
                BoletoInfo Boleto = r.Boletos[nn];
                Console.Write("{0} {1:C} {2:dd/MM/yyyy} {3:dd/MM/yyyy}\r\n",
                              Boleto.NossoNumero,
                              Boleto.ValorDocumento,
                              Boleto.DataVencimento,
                              Boleto.DataPagamento);
            }

            // por causa do tipo (r.ErroType) pode haver duplicidade de dados
            // pois um boleto pode ter sido baixado e protestado ou pago,
            // e com alguma ocorrencia e assim cada registro informa algo
            Console.WriteLine("Duplicados:");
            foreach (var Boleto in r.Boletos.Duplicados)
            {
                Console.Write("{0} {1:dd/MM/yyyy} {2:C}\r\n", Boleto.NossoNumero, Boleto.DataPagamento, Boleto.ValorDocumento);
            }
        }
Ejemplo n.º 2
0
        public void Retorno_Sicredi()
        {
            LayoutBancos r = new LayoutBancos();

            r.Init(Cedente);

            string cFileRET = File.ReadAllText(@"..\..\TXT\Retorno_Sicredi.txt");

            r.ErroType = BoletoDuplicado.Lista;
            Layout ret = r.Retorno(cFileRET);

            // O resultado pode vir completo em uma tabela
            // var tb = ret.Table(typeof(CNAB400Retorno1Bradesco));
            //string cErros = r.ErroLinhas;
            //Assert.IsTrue(string.IsNullOrEmpty(cErros), cErros);

            // Ou usa-se o array de boletos
            foreach (string nn in r.Boletos.NossoNumeros)
            {
                BoletoInfo Boleto = r.Boletos[nn];
                Console.Write("{0} {1:dd/MM/yyyy} {2:C}\r\n", Boleto.NossoNumero, Boleto.DataPagamento, Boleto.ValorDocumento);
            }

            // por causa do tipo (r.ErroType) pode haver duplicidade de dados
            // pois um boleto pode ter sido baixado e protestado ou pago,
            // e com alguma ocorrencia e assim cada registro informa algo
            Console.WriteLine("Duplicados:");
            foreach (var Boleto in r.Boletos.Duplicados)
            {
                Console.Write("{0} {1:dd/MM/yyyy} {2:C}\r\n", Boleto.NossoNumero, Boleto.DataPagamento, Boleto.ValorDocumento);
            }
        }
Ejemplo n.º 3
0
        public void Retorno_Caixa()
        {
            LayoutBancos r = new LayoutBancos();

            r.Init(Cedente);

            string cFileRET = File.ReadAllText(@"..\..\TXT\Retorno_Caixa.txt");

            r.ErroType = BoletoDuplicado.Lista;
            Layout ret = r.Retorno(cFileRET);

            // O resultado pode vir completo em uma tabela
            // var tb = ret.Table(typeof(CNAB400Retorno1Bradesco));
            //string cErros = r.ErroLinhas;
            //Assert.IsTrue(string.IsNullOrEmpty(cErros), cErros);

            // Ou usa-se o array de boletos
            foreach (string nn in r.Boletos.NossoNumeros)
            {
                BoletoInfo Boleto = r.Boletos[nn];
                Console.Write("{0} {1:dd/MM/yyyy} {2:C} {3:C} {4:C} {5:C} {6:C} {7:C} {8:C} {9:dd/MM/yyyy} {10:dd/MM/yyyy} {11:dd/MM/yyyy}\r\n",
                              Boleto.NossoNumero,       // 0 reg[CNAB240SegmentoTCaixa.NossoNumero]
                              Boleto.DataPagamento,     // 1 reg[CNAB240SegmentoUCaixa.DataOcorrencia];
                              Boleto.ValorDocumento,    // 2 reg[CNAB240SegmentoTCaixa.ValorDocumento],
                              Boleto.ValorAcrescimo,    // 3 reg[CNAB240SegmentoUCaixa.ValorAcrescimos];
                              Boleto.ValorDesconto,     // 4 reg[CNAB240SegmentoUCaixa.ValorDesconto];
                              Boleto.ValorDesconto2,    // 5 reg[CNAB240SegmentoUCaixa.ValorAbatimento];
                              Boleto.ValorIOF,          // 6 reg[CNAB240SegmentoUCaixa.ValorIOF];
                              Boleto.ValorPago,         // 7 reg[CNAB240SegmentoUCaixa.ValorPago];
                              Boleto.ValorLiquido,      // 8 reg[CNAB240SegmentoUCaixa.ValorLiquido];
                              Boleto.DataProcessamento, // 9 reg[CNAB240SegmentoUCaixa.DataOcorrencia];
                              Boleto.DataCredito,       //10 reg[CNAB240SegmentoUCaixa.DataCredito];
                              Boleto.DataTarifa);       //11 reg[CNAB240SegmentoUCaixa.DataTarifa];
            }

            // por causa do tipo (r.ErroType) pode haver duplicidade de dados
            // pois um boleto pode ter sido baixado e protestado ou pago,
            // e com alguma ocorrencia e assim cada registro informa algo
            Console.WriteLine("Duplicados:");
            foreach (var Boleto in r.Boletos.Duplicados)
            {
                Console.Write("{0} {1:dd/MM/yyyy} {2:C}\r\n", Boleto.NossoNumero, Boleto.DataPagamento, Boleto.ValorDocumento);
            }
        }
Ejemplo n.º 4
0
        private void btnRetorno_Click(object sender, EventArgs e)
        {
            try
            {
                // Tipo de estrutura a ser decodificada (enumerador de layout)

                /* Exemplo de registros de retorno bradesco
            10205491613000192000000900462012390740000000000000000000000004000000000000000000530000000000000000000000000903190515000000000500000000000000000053040615000000001547823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000006
            10205491613000192000000900462012390740000000000000000000000005000000000000000000610000000000000000000000000903190515000000000600000000000000000061050615000000001557823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000007
            102054916130001920000009004620123907400000000000000000000000060000000000000000007P000000000000000000000000090319051500000000070000000000000000007P060615000000001567823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000008
            10205491613000192000000900462012390740000000000000000000000007000000000000000000880000000000000000000000000903190515000000000800000000000000000088070615000000001577823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000009
                 */
                // A classe Layout tem diversos metodos genericos para fazer qualquer codificação e decodificação de textos de acordo com os tipos de enumeradores passados em seu contrutor
                //Layout lay = new Layout(typeof(CNAB400Retorno1Bradesco));
                //Layout lay = new Layout(typeof(CNAB240CobrancaRetorno));
                //Layout lay = new Layout(typeof(CNAB400Retorno1Bradesco));
                //Layout lay = new Layout(typeof(CNAB240SegmentoTCaixa));
                //Layout lay = new Layout(typeof(CNAB400Retorno1Itau));

                // Coloca o texto em questão para ser interpretado
                //lay.Conteudo = txtRetorno.Text;

                // Internamente a classe de Layour armazena todos os dados e por gerar outros objetos como um DataTable com uma das estruturas
                //gv.DataSource = lay.Table(lay.GetLayoutType(0));

                LayoutBancos r = new LayoutBancos(); // classe genérica para qualquer banco, compatível até com ActiveX
                r.Init(new CedenteInfo { Banco = "341", Layout = LayoutTipo.Auto });
                r.Boletos.AddErroType = BoletoDuplicado.Ignore;
                Layout ret = r.Retorno(txtRetorno.Text);
                gvREG.DataSource = ret.Table(ret.GetLayoutType(0));

                DataTable tb = new DataTable();
                tb.Columns.Add("NossoNumero", typeof(string));
                tb.Columns.Add("NumeroDocumento", typeof(string));
                tb.Columns.Add("DataDocumento", typeof(DateTime));
                tb.Columns.Add("DataVencimento", typeof(DateTime));
                tb.Columns.Add("DataPagamento", typeof(DateTime));
                tb.Columns.Add("ValorDocumento", typeof(double));
                tb.Columns.Add("ValorPago", typeof(double));
                foreach (string nn in r.Boletos.NossoNumeros)
                {
                    // é possivel le os dados de cada boleto
                    BoletoInfo Boleto = r.Boletos[nn];
                    tb.Rows.Add(
                        Boleto.NossoNumero,
                        Boleto.NumeroDocumento,
                        Boleto.DataDocumento,
                        Boleto.DataVencimento,
                        Boleto.DataPagamento,
                        Boleto.ValorDocumento,
                        Boleto.ValorPago);
                }
                gvTB.DataSource = tb;

                if (string.IsNullOrEmpty(r.ErroLinhas))
                    txtOut.Text = "OK";
                else
                    txtOut.Text = "Arquivo processado mas as linhas abaixo estão parcialmente duplicadas\r\n" + r.ErroLinhas;
                    // Isso ocorre quando o banco toma alguma ação, ou algum sistema errou, trate essa linha a parte manualmente, ou algum euristica.
                    // em: r.Boletos.Duplicados há a relação destes boletos
            }
            catch (Exception ex)
            {
                txtOut.Text = "";
                while (ex != null)
                {
                    txtOut.Text += ex.Message + "\r\n" + ex.StackTrace;
                    ex = ex.InnerException;
                }
            }
        }
Ejemplo n.º 5
0
    protected void btnRetorno_Click(object sender, EventArgs e)
    {   // apenas alguns campos serão exibidos, e serão re-gerados os boletos baseados nos dados do retorno
        if (string.IsNullOrEmpty(txtRetorno.Text.Trim()))
        {
            return;
        }

        //CNAB400Bradesco r = new CNAB400Bradesco(); //MapPath("CB210900.RET"));
        // CNAB400Itau r = new CNAB400Itau(); //MapPath("CB210900.RET"));
        // r.Retorno(txtRetorno.Text);
        //CedenteInfo cedente = r.Cedente;
        Label lbl = new Label();
        //dvBoletos.Controls.Add(lbl);
        //lbl.Text = "Cedente: " + cedente.Cedente + "<br/>";

        var r = new LayoutBancos();

        r.Init(Cedente);

        // ATENÇÃO: Um boleto pago vencido as vezes pode conter 2 registor, um altedando a data de vencimento e outro efetivando a baixa
        // r.ErroType = BoletoDuplicado.Ignore
        r.ErroType = BoletoDuplicado.Lista;

        int    nLoops  = 0;
        string cLinhas = txtRetorno.Text;

        do
        {
            nLoops++;
            lbl = new Label();
            dvBoletos.Controls.Add(lbl);
            lbl.Text = "<b>Loop: " + nLoops + "</b><br/>";

            r.Boletos.Clear();
            var ret = r.Retorno(cLinhas);

            try
            {
                dtg.DataSource = ret.Table(ret.GetLayoutType(0));
                dtg.DataBind();
            }
            catch
            {
            }

            foreach (string nn in r.Boletos.NossoNumeros)
            {
                lbl = new Label();
                dvBoletos.Controls.Add(lbl);

                var Boleto = r.Boletos[nn];
                lbl.Text = string.Format("{0} {1:dd/MM/yyyy} {2:C} {3}<br/>\r\n", Boleto.NossoNumero, Boleto.DataVencimento, Boleto.ValorDocumento, Boleto.Ocorrencia);
            }

            if (r.Boletos.Duplicados != null && r.Boletos.Duplicados.Count > 0)
            {
                lbl = new Label();
                dvBoletos.Controls.Add(lbl);
                lbl.Text = "<b>Duplicados:</b><br/>";
                foreach (BoletoInfo Boleto in r.Boletos.Duplicados)
                {
                    lbl = new Label();
                    dvBoletos.Controls.Add(lbl);
                    lbl.Text = string.Format("{0} {1:dd/MM/yyyy} {2:C} {3}<br/>\r\n", Boleto.NossoNumero, Boleto.DataVencimento, Boleto.ValorDocumento, Boleto.Ocorrencia);
                }
                break;
            }
            else
            {
                // Verifica se mudou alguma coisa  (r.ErroType = BoletoDuplicado.Ignore)
                if (cLinhas != r.Boletos.ErroLinhas)
                {
                    // linhas que precisariam ser reprocessadas separadamente por qualquer motivo
                    cLinhas = r.Boletos.ErroLinhas;
                }
                else
                {
                    break;
                }
            }
        } while (!string.IsNullOrEmpty(cLinhas) && nLoops < 10); // Coloca um valor maximo por segurança
    }
    protected void btnTest_Click(object sender, EventArgs e)
    {
        lblOut.Text = "";
        try
        {
            /* Exemplo de retorno BRADESCO
             * 10205491613000192000000900462012390740000000000000000000000004000000000000000000530000000000000000000000000903190515000000000500000000000000000053040615000000001547823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000006
             * 10205491613000192000000900462012390740000000000000000000000005000000000000000000610000000000000000000000000903190515000000000600000000000000000061050615000000001557823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000007
             * 102054916130001920000009004620123907400000000000000000000000060000000000000000007P000000000000000000000000090319051500000000070000000000000000007P060615000000001567823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000008
             * 10205491613000192000000900462012390740000000000000000000000007000000000000000000880000000000000000000000000903190515000000000800000000000000000088070615000000001577823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000009
             * 102005478600001400000009004620124576700000000000000000000069050000000009000006905300000000000000000000000009322307150000006905000000000900000690530207150000000009540237       000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          3300000000                                                                  000036
             * 102005478600001400000009004620124576700000000000000000000069410000000009000006941P000000000000000000000000093223071500000069410000000009000006941P0907150000000048058237       000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          3300000000                                                                  000037
             * 102005478600001400000009004620124576700000000000000000000069680000000009000006968100000000000000000000000009322307150000006968000000000900000696811307150000000009800237       000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          3300000000                                                                  000038
             */

            /* Exemplo de retorno SICOOB
             * 02RETORNO01COBRANÇA       30090000198889145823ELTON JOHN GOMES DA SILVA ME  756 - BANCOOB S/A 2203160000694                                                                                                                                                                                                                                                                                               000001
             * 1020569299500011230090000145823000000                         000000056978010000000OU00000000000000000000 0205210316                              210316000000001040010407190992103160000160000000000000000000000000000000000000000000000000000000000000000000000000010400000000000000000000000000000000000000000000000000000010000000000000          0000000000000000000000000000000000000000000000000000000002
             * 1020569299500011230090000145823000000                         000000056082010000000OU00000000000000000000 0205210316                              200316000000002200010401160992103160000160000000000000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000010000000000000          0000000000000000000000000000000000000000000000000000000003
             * 1020569299500011230090000145823000000                         000000057281010000000OU00000000000000000000 0205210316                              210316000000031850000108330992103160000160000000000000000000000000000000000000000000000000000000000000000000000000318500000000000000000000000000000000000000000000000000000010000000000000          0000000000000000000000000000000000000000000000000000000004
             * 9027563009SICOOB NORTE             AV. JONES DOS SANTOS NEVES                        CENTRO                        29800000Barra de São Francisco        ES220320160000000300001969859                                                                                                                                                                                                                    000005
             */

            LayoutBancos r = new LayoutBancos(); // classe genérica para qualquer banco, compatível até com ActiveX
            // é necessário apenas informar o numero do banco do cedente para usar a rotina de retorno do banco correto
            //r.Init(new CedenteInfo { Banco = "001" }); // Banco do Brasil
            //r.Init(new CedenteInfo { Banco = "033" }); // Banespa (Santander)
            //r.Init(new CedenteInfo { Banco = "104" }); // Caixa
            //r.Init(new CedenteInfo { Banco = "237" }); // Brtadesco
            //r.Init(new CedenteInfo { Banco = "341" }); // Itau
            //r.Init(new CedenteInfo { Banco = "353" }); // Santander
            r.Init(new CedenteInfo {
                Banco = Request["banco"] ?? "341", Layout = LayoutTipo.Auto
            });                                                                                    // Sicoob

            // Processar e identificar os registros
            Layout ret = r.Retorno(txtIn.Text);

            // Renderiza o conteudo lido
            //gv.DataSource = ret.Table(typeof(CNAB400Retorno1Bradesco));
            //gv.DataBind();

            // O resultado estará dentro de um array de boletos
            BoletoInfo Boleto;
            foreach (string nn in r.Boletos.NossoNumeros)
            {
                Boleto       = r.Boletos[nn];
                lblOut.Text += string.Format("{0} {1:dd/MM/yyyy} {2:C} <br/>\r\n", Boleto.NossoNumero, Boleto.DataVencimento, Boleto.ValorDocumento);
            }

            // uma opção mas simples é ler diretamente as linhas de um tipo de arquivo, mas devem ser exatamento do tipo correto
            // Tipo de estrutura a ser decodificada (enumerador de layout)
            //Type tp = typeof(CNAB240CobrancaRetorno);
            //Type tp = typeof(CNAB400Retorno1Bradesco);
            //Type tp = typeof(CNAB400Retorno1Itau);
            //Type tp = typeof(CNAB240SegmentoTCaixa);

            // A classe Layout tem diversos metodos genericos para fazer qualquer codificação e decodificação de textos de acordo com os tipos de enumeradores passados em seu contrutor
            //Layout lay = new Layout(tp);

            // Coloca o texto em questão para ser interpretado
            //lay.Conteudo = txtIn.Text;

            // Internamente a classe de Layour armazena todos os dados e por gerar outros objetos como um DataTable com uma das estruturas
            //gv.DataSource = lay.Table(tp);

            // Renderiza o conteudo lido
            //gv.DataBind();
        }
        catch (Exception ex)
        {
            lblOut.Text += "<br/>ERRO: " + ex.Message;
        }
    }
    protected void btnTest_Click(object sender, EventArgs e)
    {
        lblOut.Text = "";
        try
        {
            /* Exemplo de retorno BRADESCO
            10205491613000192000000900462012390740000000000000000000000004000000000000000000530000000000000000000000000903190515000000000500000000000000000053040615000000001547823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000006
            10205491613000192000000900462012390740000000000000000000000005000000000000000000610000000000000000000000000903190515000000000600000000000000000061050615000000001557823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000007
            102054916130001920000009004620123907400000000000000000000000060000000000000000007P000000000000000000000000090319051500000000070000000000000000007P060615000000001567823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000008
            10205491613000192000000900462012390740000000000000000000000007000000000000000000880000000000000000000000000903190515000000000800000000000000000088070615000000001577823703152  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          0800000000                                                                  000009
            102005478600001400000009004620124576700000000000000000000069050000000009000006905300000000000000000000000009322307150000006905000000000900000690530207150000000009540237       000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          3300000000                                                                  000036
            102005478600001400000009004620124576700000000000000000000069410000000009000006941P000000000000000000000000093223071500000069410000000009000006941P0907150000000048058237       000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          3300000000                                                                  000037
            102005478600001400000009004620124576700000000000000000000069680000000009000006968100000000000000000000000009322307150000006968000000000900000696811307150000000009800237       000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000                          3300000000                                                                  000038
            */

            /* Exemplo de retorno SICOOB
            02RETORNO01COBRANÇA       30090000198889145823ELTON JOHN GOMES DA SILVA ME  756 - BANCOOB S/A 2203160000694                                                                                                                                                                                                                                                                                               000001
            1020569299500011230090000145823000000                         000000056978010000000OU00000000000000000000 0205210316                              210316000000001040010407190992103160000160000000000000000000000000000000000000000000000000000000000000000000000000010400000000000000000000000000000000000000000000000000000010000000000000          0000000000000000000000000000000000000000000000000000000002
            1020569299500011230090000145823000000                         000000056082010000000OU00000000000000000000 0205210316                              200316000000002200010401160992103160000160000000000000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000010000000000000          0000000000000000000000000000000000000000000000000000000003
            1020569299500011230090000145823000000                         000000057281010000000OU00000000000000000000 0205210316                              210316000000031850000108330992103160000160000000000000000000000000000000000000000000000000000000000000000000000000318500000000000000000000000000000000000000000000000000000010000000000000          0000000000000000000000000000000000000000000000000000000004
            9027563009SICOOB NORTE             AV. JONES DOS SANTOS NEVES                        CENTRO                        29800000Barra de São Francisco        ES220320160000000300001969859                                                                                                                                                                                                                    000005
            */

            LayoutBancos r = new LayoutBancos(); // classe genérica para qualquer banco, compatível até com ActiveX
            // é necessário apenas informar o numero do banco do cedente para usar a rotina de retorno do banco correto
            //r.Init(new CedenteInfo { Banco = "001" }); // Banco do Brasil
            //r.Init(new CedenteInfo { Banco = "033" }); // Banespa (Santander)
            //r.Init(new CedenteInfo { Banco = "104" }); // Caixa
            //r.Init(new CedenteInfo { Banco = "237" }); // Brtadesco
            //r.Init(new CedenteInfo { Banco = "341" }); // Itau
            //r.Init(new CedenteInfo { Banco = "353" }); // Santander
            r.Init(new CedenteInfo { Banco = Request["banco"] ?? "341", Layout=LayoutTipo.Auto }); // Sicoob

            // Processar e identificar os registros
            Layout ret = r.Retorno(txtIn.Text);

            // Renderiza o conteudo lido
            //gv.DataSource = ret.Table(typeof(CNAB400Retorno1Bradesco));
            //gv.DataBind();

            // O resultado estará dentro de um array de boletos
            BoletoInfo Boleto;
            foreach (string nn in r.Boletos.NossoNumeros)
            {
                Boleto = r.Boletos[nn];
                lblOut.Text += string.Format("{0} {1:dd/MM/yyyy} {2:C} <br/>\r\n", Boleto.NossoNumero, Boleto.DataVencimento, Boleto.ValorDocumento);
            }

            // uma opção mas simples é ler diretamente as linhas de um tipo de arquivo, mas devem ser exatamento do tipo correto
            // Tipo de estrutura a ser decodificada (enumerador de layout)
            //Type tp = typeof(CNAB240CobrancaRetorno);
            //Type tp = typeof(CNAB400Retorno1Bradesco);
            //Type tp = typeof(CNAB400Retorno1Itau);
            //Type tp = typeof(CNAB240SegmentoTCaixa);

            // A classe Layout tem diversos metodos genericos para fazer qualquer codificação e decodificação de textos de acordo com os tipos de enumeradores passados em seu contrutor
            //Layout lay = new Layout(tp);

            // Coloca o texto em questão para ser interpretado
            //lay.Conteudo = txtIn.Text;

            // Internamente a classe de Layour armazena todos os dados e por gerar outros objetos como um DataTable com uma das estruturas
            //gv.DataSource = lay.Table(tp);

            // Renderiza o conteudo lido
            //gv.DataBind();
        }
        catch(Exception ex)
        {
            lblOut.Text += "<br/>ERRO: " + ex.Message;
        }
    }