Пример #1
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);
            }
        }
Пример #2
0
        public void Remessa_Sicoob()
        {
            LayoutBancos lb = new LayoutBancos();

            lb.Init(Cedente);
            // O CNB240 tem a referencia da data de geração do arquivo,
            // portato se não for passado a data e hora da gração do anterior nunca irá dar igual
            // Mas atenção é preciso primeiro definir o cedente
            lb.DataHoje = DateTime.Parse("13/12/2015 16:34:08");
            //lb.Lote = 1234;
            //lb.SequencialLote = 5678;

            Util.AddBoletos(lb);

            // Exibir as informações de DUMP ajuda a char os erros e diferenças
            // lb.ShowDumpLine = true;

            string txt = lb.Remessa();

            Console.Write(txt);

            File.WriteAllText(@"..\..\TXT\Teste_Sicoob.txt", txt); // Gera um arquivo para testes
            // File.WriteAllText(fileTest, txt); // Gera um novo modelo
            string cAnterior = File.ReadAllText(fileTest);

            // Isso necessáriamente não é um erro, pode ter sido uma correção ou melhoria que agora contemple mais casos
            Assert.IsTrue(cAnterior == txt, "O resultado da remessa mudou");
        }
Пример #3
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);
            }
        }
Пример #4
0
        public void Remessa_Caixa()
        {
            LayoutBancos lb = new LayoutBancos();

            lb.Init(Cedente);
            lb.DataHoje = DateTime.Parse("13/12/2015 16:34:08");

            Util.AddBoletos(lb);

            // Exemplo de definições de dados não calculados no componente, ou não existente inicialmente
            BoletoInfo boleto = lb.Boletos[Util.NossoNumeroInicial.ToString()];      // Captura apenas o primeiro boleto adicionado pela minha rotina padrão de geração

            boleto.SetRegEnumValue(CNAB240SegmentoPCaixa.Juros, 1);                  // 118
            boleto.SetRegEnumValue(CNAB240SegmentoPCaixa.JurosData, Util.DataTeste); // 119-126
            boleto.SetRegEnumValue(CNAB240SegmentoPCaixa.JurosMora, 0.26);           // 127-141
            boleto.SetRegEnumValue(CNAB240SegmentoPCaixa.ProtestoPrazo, 15);         // 222-223

            // Exibir as informações de DUMP ajuda a char os erros e diferenças
            // lb.ShowDumpLine = true;

            string txt = lb.Remessa();

            Console.Write(txt);

            File.WriteAllText(@"..\..\TXT\Teste_Caixa.txt", txt); // Gera um arquivo para testes de compraração
            // File.WriteAllText(fileTest, txt); // Gera um novo modelo
            string cAnterior = File.ReadAllText(fileTest);

            // Isso necessáriamente não é um erro, pode ter sido uma correção ou melhoria que agora contemple mais casos
            Assert.IsTrue(cAnterior == txt);
        }
Пример #5
0
        public void Remessa_Banestes()
        {
            // (em homologação: 27/04/2016)

            LayoutBancos lb = new LayoutBancos();

            lb.Init(Cedente);
            lb.DataHoje = DateTime.Parse("23/04/2016 11:30:00");

            Util.AddBoletos(lb);

            //// Exemplo de definições de dados não calculados no componente, ou não existente inicialmente
            BoletoInfo boleto = lb.Boletos[Util.NossoNumeroInicial.ToString()];                     // Captura apenas o primeiro boleto adicionado pela minha rotina padrão de geração

            boleto.SetRegEnumValue(CNAB400Remessa1Banestes.Mensagem, "Mensagem a ser impressa..."); // 352-391

            // Exibir as informações de DUMP ajuda a char os erros e diferenças
            // lb.ShowDumpLine = true;

            string txt = lb.Remessa();

            Console.Write(txt);

            File.WriteAllText(@"..\..\TXT\Teste_Banestes.txt", txt); // Gera um arquivo para testes de compraração
            //File.WriteAllText(fileTest, txt); // Gera um novo modelo
            string cAnterior = File.ReadAllText(fileTest);

            // Isso necessáriamente não é um erro, pode ter sido uma correção ou melhoria que agora contemple mais casos
            Assert.IsTrue(cAnterior == txt);
        }
Пример #6
0
        public void Remessa_Sicredi()
        {
            LayoutBancos lb = new LayoutBancos();

            lb.Init(Cedente);
            // Somente apos inicializar, pode-se definir alguns valores!
            lb.DataHoje = Util.DataTeste; // Data a ser usada no header da remessa, para dar sempre o mesmo resultado nos testes
            lb.Lote     = 1234;           // apenas para sempre gerar o mesmo numero de lote a cada teste

            // E em seguida adiciona os boletos
            Util.AddBoletos(lb);

            // Exibir as informações de DUMP ajuda a char os erros e diferenças
            // lb.ShowDumpLine = true;

            // Mas atenção, a geração do nosso numero usa o ANO atual como parametro
            // Alguns clientes usam a data de vencimento, dependendo do tipo de solução
            string txt = lb.Remessa();

            Console.Write(txt);

            File.WriteAllText(@"..\..\TXT\Teste_Sicredi.txt", txt); // Gera um arquivo para testes
            //File.WriteAllText(@"..\..\TXT\Remessa_Sicredi.txt", txt); // Gera um novo modelo
            string cAnterior = File.ReadAllText(@"..\..\TXT\Remessa_Sicredi.txt");

            // Isso necessáriamente não é um erro, pode ter sido uma correção ou melhoria que agora contemple mais casos
            Assert.IsTrue(cAnterior == txt, "O resultado da remessa mudou");
        }
Пример #7
0
        public void Remessa_BB5()
        {
            LayoutBancos lb = new LayoutBancos();

            lb.Init(Cedente);
            lb.cnab.AddOpcionalType(typeof(CNAB400Remessa5BB)); // Tipagem do registro opcional definido neste exemplo (externo aos fontes)
            lb.onRegOpcional = BB_Registro5_Opcional;           // o evento para processar o registro opcional

            Util.AddBoletos(lb);

            string txt = lb.Remessa();

            Console.Write(txt);
        }
Пример #8
0
        public void Remessa_CaixaR()
        {
            LayoutBancos lb = new LayoutBancos();

            lb.Init(Cedente);                            // A inicialização define a instancia 'cnab' apropriada de acordo com o cedente
            lb.cnab.AddOpcionalType(typeof(CNAB240SegmentoRCaixa));
            lb.onRegOpcional = Caixa_SegmentoR_Opcional; // o evento pertence a instancia do 'cnab', é é apenas redirecionado internamente
                                                         // lb.cnab.onRegOpcional += Caixa_SegmentoR_Opcional;

            Util.AddBoletos(lb);

            string txt = lb.Remessa();

            Console.Write(txt);
        }
Пример #9
0
        public void Remessa_Santander()
        {
            LayoutBancos lb = new LayoutBancos();

            lb.Init(Cedente);
            lb.DataHoje = Util.DataTeste;
            Util.AddBoletos(lb);
            string txt = lb.Remessa();

            Console.Write(txt);

            File.WriteAllText(@"..\..\TXT\Teste_Santander.txt", txt); // Gera um arquivo para testes de compraração
            // File.WriteAllText(fileTest, txt); // Gera um novo modelo
            string cAnterior = File.ReadAllText(fileTest);

            // Isso necessáriamente não é um erro, pode ter sido uma correção ou melhoria que agora contemple mais casos
            Assert.IsTrue(cAnterior == txt, "O resultado da remessa mudou");
        }
Пример #10
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);
            }
        }
Пример #11
0
        public void Remessa_Santander240()
        {
            LayoutBancos lb = new LayoutBancos();

            Cedente.Layout = LayoutTipo.CNAB240; // O Santander tem os dois layouts, o CNAB400 é sempre o padrão se selecionar auto
            lb.Init(Cedente);
            lb.DataHoje = Util.DataTeste;
            Util.AddBoletos(lb);
            // lb.ShowDumpLine = true;
            string txt = lb.Remessa();

            Console.Write(txt);
            string cAnterior;

            File.WriteAllText(@"..\..\TXT\Teste_Santander240.txt", txt);   // Gera um arquivo para testes de compraração
            File.WriteAllText(@"..\..\TXT\Remessa_Santander240.txt", txt); // Gera um novo modelo
            cAnterior = File.ReadAllText(@"..\..\TXT\Remessa_Santander240.txt");

            // Isso necessáriamente não é um erro, pode ter sido uma correção ou melhoria que agora contemple mais casos
            Assert.IsTrue(cAnterior == txt, "O resultado da remessa mudou");
        }
Пример #12
0
        public void Remessa_Santander400()
        {
            LayoutBancos lb = new LayoutBancos();

            Cedente.Layout = LayoutTipo.CNAB400; // layout padrão
            lb.Init(Cedente);
            lb.DataHoje = Util.DataTeste;
            Util.AddBoletos(lb);
            // lb.ShowDumpLine = true;
            string txt = lb.Remessa();

            Console.Write(txt);
            string cAnterior;

            File.WriteAllText(@"..\..\TXT\Teste_Santander400.txt", txt); // Gera um arquivo para testes de compraração
            // File.WriteAllText(@"..\..\TXT\Remessa_Santander400.txt", txt); // Gera um novo modelo
            // no footer foi removido a contege, do header e footer, é contado apenas o numero de boletos!
            cAnterior = File.ReadAllText(@"..\..\TXT\Remessa_Santander400.txt");

            // Isso necessáriamente não é um erro, pode ter sido uma correção ou melhoria que agora contemple mais casos
            Assert.IsTrue(cAnterior == txt, "O resultado da remessa mudou");
        }
Пример #13
0
        public void Remessa_BB()
        {
            LayoutBancos lb = new LayoutBancos();

            lb.Init(Cedente);
            lb.DataHoje = DateTime.Parse("19/06/2016 20:31:08");

            Util.AddBoletos(lb);

            // Exibir as informações de DUMP ajuda a char os erros e diferenças
            // lb.ShowDumpLine = true;

            string txt = lb.Remessa();

            Console.Write(txt);

            File.WriteAllText(@"..\..\TXT\Teste_BB.txt", txt); // Gera um arquivo para testes de compraração
            //File.WriteAllText(fileTest, txt); // Gera um novo modelo
            string cAnterior = File.ReadAllText(fileTest);

            // Isso necessáriamente não é um erro, pode ter sido uma correção ou melhoria que agora contemple mais casos
            Assert.IsTrue(cAnterior == txt);
        }
Пример #14
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;
        }
    }
Пример #16
0
        private void btnGerar_Click(object sender, EventArgs e)
        {
            // Definição dos dados do cedente - QUEM RECEBE / EMITE o boleto
            CedenteInfo Cedente = new CedenteInfo();
            Cedente.Cedente = "TESTE QUALQUER LTDA";
            Cedente.CNPJ = "12123123/0001-01";
            Cedente.Layout = LayoutTipo.Auto;

            // ABAIXO DESCOMENTE o bloco de dados do banco que pretende usar

            // SANTANDER
            //Cedente.Banco = "033";
            //Cedente.Agencia = "1234-1";
            //Cedente.Conta = "001234567-8";
            //Cedente.CodCedente = "1231230";
            //Cedente.CarteiraTipo = "5";
            //Cedente.Carteira = "101";
            //Cedente.CedenteCOD = "33333334892001304444"; // 20 digitos (note que o final, é o numero da conta, sem os ultios 2 digitos)
            //Cedente.Convenio = "0000000000000000002222220"; // 25 digitos
            //Cedente.useSantander = true; //importante para gerar o código de barras correto (por questão de compatibilidade o padrão é false)

            // BRADESCO
            Cedente.Banco = "237-2";
            Cedente.Agencia = "1510";
            Cedente.Conta = "001466-4";
            Cedente.Carteira = "09";
            Cedente.CedenteCOD = "00000000000001111111"; // 20 digitos

            // ITAU
            //Cedente.CedenteCOD = "514432001";
            //Cedente.Banco = "341-1";
            //Cedente.Agencia = "6260";
            //Cedente.Conta = "01607-3";
            //Cedente.Carteira = "109";

            // Banco do Brasil
            //Cedente.Banco = "001-9";
            //Cedente.Agencia = "294-1";
            //Cedente.Conta = "004570-6";
            //Cedente.Carteira = "18";
            //Cedente.Modalidade = "21";
            //Cedente.Convenio = "859120";

            // CAIXA
            //Cedente.Banco = "104";
            //Cedente.Agencia = "123-4";
            //Cedente.Conta = "5678-9";
            //Cedente.Carteira = "2";          // Código da Carteira
            //Cedente.Convenio = "02";         // CNPJ do PV da conta do cliente
            //Cedente.CodCedente = "455932";   // Código do Cliente(cedente)
            //Cedente.Modalidade = "14";       // G069 - CC = 14 (título Registrado emissão Cedente)
            //Cedente.Endereco = "Rua Sei la aonde";
            //Cedente.Informacoes =
            //    "SAC CAIXA: 0800 726 0101 (informações, reclamações, sugestões e elogios)<br/>" +
            //    "Para pessoas com deficiência auditiva ou de fala: 0800 726 2492<br/>" +
            //    "Ouvidoria: 0800 725 7474 (reclamações não solucionadas e denúncias)<br/>" +
            //    "<a href='http://caixa.gov.br' target='_blank'>caixa.gov.br</a>";
            //BoletoTextos.LocalPagamento = "PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE";

            // SICRED
            //Cedente.Banco = "748-2";
            //Cedente.Agencia = "1234-5";
            //Cedente.Conta = "98765-1";
            //Cedente.CodCedente = "12345";
            //Cedente.Modalidade = "04";

            // UNICRED
            //Cedente.Banco = "091-4";
            //Cedente.Agencia = "1234-5";
            //Cedente.Conta = "98765-1";
            //Cedente.CodCedente = "12345";

            //Definição dos dados do sacado
            SacadoInfo Sacado = new SacadoInfo();
            Sacado.Sacado = "Fábio F S";
            Sacado.Documento = "192.211.498-70";
            Sacado.Endereco = "Rua 21 de Abril 1001 ap 21";
            Sacado.Cidade = "São Paulo";
            Sacado.Bairro = "Brás";
            Sacado.Cep = "03047-000";
            Sacado.UF = "SP";
            Sacado.Email = "*****@*****.**";
            Sacado.Avalista = "Avalista";

            LayoutBancos r = new LayoutBancos();
            r.Init(Cedente);
            r.Lote = CobUtil.GetInt(txtLote.Text);
            r.ShowDumpLine = chkDump.Checked;
            //r.onRegBoleto = r_onRegBoleto; // Para personalizar as linhas com os campos adicionais

            for (int n = 0; n < Int32.Parse(txtQTD.Text); n++)
            {
                //Definição das Variáveis do boleto
                BoletoInfo Boleto = new BoletoInfo();
                Boleto.BoletoID = n;
                Boleto.NossoNumero = (Int32.Parse(txtNossoNumero.Text) + n).ToString();
                Boleto.NumeroDocumento = Boleto.NossoNumero;
                Boleto.ValorDocumento = double.Parse(txtValor.Text) + n;
                Boleto.DataDocumento = DateTime.Now;
                Boleto.DataVencimento = DateTime.Parse(txtVencimento.Text).AddDays(n);
                Boleto.Instrucoes = "Todas as informações deste bloqueto são de exclusiva responsabilidade do cedente";

                // outros campos opcionais
                Boleto.ValorMora = Boleto.ValorDocumento * 0.2 / 30; // Vale lembrar que o juros pode ser tão pequeno que as vezes pode sair como isento
                Boleto.PercentualMulta = 0.03;
                Boleto.ValorDesconto = n;
                Boleto.DataDesconto = DateTime.Now;
                Boleto.ValorOutras = -n; // abatimentos

                /* Exemplo de uso valido apenas para o Bradesco (Página 21 do arquivo: layout_cobranca_port_BRADESCO.pdf)
                 * Cada banco usa estes campos da forma que eles querem

                157 a 160 - 1ª / 2ª Instrução
                Campo destinado para pré-determinar o protesto do Título ou a baixa por decurso de prazo, quando do registro.
                Não havendo interesse, preencher com Zeros.
                Porém, caso a Empresa deseje se utilizar da instrução automática de protesto ou da baixa por decurso de prazo, abaixo os procedimentos:

                Protesto:
                - posição 157 a 158 = Indicar o código “06” - (Protestar).
                - posição 159 a 160 = Indicar o número de dias a protestar (mínimo 5 dias).

                Protesto Falimentar:
                - posição 157 a 158 = Indicar o código “05” – (Protesto Falimentar)
                - posição 159 a 160 = Indicar o número de dias a protestar (mínimo 5 dias).

                Decurso de Prazo:
                - posição 157 a 158 = Indicar o código “18” – (Decurso de prazo).
                - posição 159 a 160 = Indicar o número de dias para baixa por decurso de prazo.

                Nota: A posição 157 a 158, também poderá ser utilizada para definir as seguintes mensagens, a serem impressas nos Boletos de cobrança, emitidas pelo Banco:
                08 Não cobrar juros de mora
                09 Não receber após o vencimento
                10 Multa de 10% após o 4º dia do Vencimento.
                11 Não receber após o 8º dia do vencimento.
                12 Cobrar encargos após o 5º dia do vencimento.
                13 Cobrar encargos após o 10º dia do vencimento.
                14 Cobrar encargos após o 15º dia do vencimento
                15 Conceder desconto mesmo se pago após o vencimento.
                Atenção: Essas instruções deverão ser enviadas no Arquivo-Remessa, quando da entrada, desde que o código de ocorrência na posição 109 a 110 do registro de transação, seja “01”, para as instruções de protesto, o CNPJ / CPF e o endereço do Sacado deverão ser informados corretamente.
                */
                Boleto.Instrucao1 = 6; // Protestar
                Boleto.Instrucao2 = 7; // Depois de 7 dias do vencimento

                // No bRadesco não é usado o campo Comando, mas outros bancos podem usar
                // Boleto.Comando = 0;

                // As linhas a seguir customiza qualquer valor sem precisar usar o evento 'r.onRegBoleto' o que torna a implementação mais simples
                // A forma mais pratica e segura é sempre usar os enumeradores
                // Mas é possivel usar as duas opções como neste exemplo, mas os valores personalizados tem sempre prioridade pois são inserridos por ultimo apos todos calculos, e processamento de eventos, portanto use com cuidado!
                Boleto.SetRegEnumValue(CNAB400Remessa1Sicredi.TipoJuros, "B");    // (posição 19) // Apenas se atente para a diferença do nome para SetRegEnumValue()
                Boleto.SetRegKeyValue("CNAB400Remessa1Sicredi.Alteracao", "E");   // (posição 71) // É possivel adicionar o nome e valor do enumerador, isso é compativel com VB6
                // Cuidado ao deixar algo explicito diretamente:
                // Boleto.SetRegKeyValue("Emissao", "B"); // posição 74 // ou simplesmente informar o nome do campo, mas cuidado pois há layouts que usam mais de um tipo de registro e as vezes tem nomes iguais mas as funções podem ser diferentes
                Boleto.SetRegEnumValue(CNAB400Remessa1Bradesco.Condicao, 1); // Apenas para Bradesco enviar o boleto para residencia

                // Gera um registro
                //Boleto.Sacado = Sacado; // obrigatório para o registro
                r.Add(Boleto, Sacado);
            }

            // o numero de exemplo '123' é apenas um numero de teste
            // este numero é muito importante que seja gerado de forma exclusiva e sequencial
            txtRemessa.Text = r.Remessa(); //r.CNAB400(123);
        }
Пример #17
0
    protected void btnRemessa_Click(object sender, EventArgs e)
    {   // (Não é o foco validar dados de entrada, e sim testar a geração de registro)
        //Definição dos dados do sacado
        SacadoInfo Sacado = new SacadoInfo();

        Sacado.Sacado    = "Pedro Alvarez Cabral";
        Sacado.Documento = "123.123.134-12";
        Sacado.Endereco  = "Rua 21 de Abril";
        Sacado.Cidade    = "São Paulo";
        Sacado.Bairro    = "Vera Cruz";
        Sacado.Cep       = "01500-000";
        Sacado.UF        = "SP";
        Sacado.Email     = "*****@*****.**";

        // Usando a classe bradesco diretamente
        // CNAB400Bradesco r = new CNAB400Bradesco();
        // r.Cedente = Cedente;
        // r.NumeroLote += 2000000; // inicia com 3 o numero do lote! (soma 20 anos)

        var r = new LayoutBancos();

        r.Init(Cedente);
        r.Lote = 123456; // é o NumeroLote do CNAB: é preciso gerar uma sequencia armazenada em banco que não se repita
        // O lote padrão gera AADDDHH (Ano, Dia do ano, Hora)

        //r.ShowDumpReg = true;

        // customiza campos
        r.onRegBoleto = CustomRegBoleto;

        for (int n = 0; n < Int32.Parse(txtQTD.Text); n++)
        {
            //Definição das Variáveis do boleto
            var Boleto = new BoletoInfo();
            Boleto.BoletoID        = n;
            Boleto.NossoNumero     = (Int32.Parse(txtNossoNumero.Text) + n).ToString();
            Boleto.NumeroDocumento = Boleto.NossoNumero;
            Boleto.ValorDocumento  = double.Parse(txtValor.Text) + n;
            Boleto.DataDocumento   = DateTime.Now;
            Boleto.DataVencimento  = DateTime.Parse(txtVencimento.Text).AddDays(n);
            Boleto.Instrucoes      = "Todas as informações deste bloqueto são de exclusiva responsabilidade do cedente";

            // WebControl
            var blt = new BoletoWeb();
            dvBoletos.Controls.Add(blt);

            blt.ImagePath         = "../imagens/"; // Define o diretório de imagens
            blt.ExibeReciboSacado = false;         // Apenas para exibir a parte que interessa do boleto
            blt.CssCell           = "BolCell";
            blt.CssField          = "BolField";

            // Gera um boleto
            blt.MakeBoleto(Cedente, Sacado, Boleto);

            // Gera um registro
            Boleto.SacadoInit(Sacado); // obrigatório para o registro
            r.Boletos.Add(Boleto, null);
        }

        // o numero de exemplo '123' é apenas um numero de teste
        // este numero é muito importante que seja gerado de forma exclusiva e sequencial
        txtRemessa.Text = r.Remessa(); //r.CNAB400(123);
    }
    protected void btnTest_Click(object sender, EventArgs e)
    {
        // Definição dos dados do cedente - QUEM RECEBE / EMITE o boleto
        CedenteInfo Cedente = new CedenteInfo();

        Cedente.Cedente = "TESTE QUALQUER LTDA";
        Cedente.CNPJ    = "12123123/0001-01";

        // ABAIXO DESCOMENTE o bloco de dados do banco que pretende usar

        // SANTANDER
        //Cedente.Banco = "033";
        //Cedente.Agencia = "1234-1";
        //Cedente.Conta = "001234567-8";
        //Cedente.CodCedente = "1231230";
        //Cedente.CarteiraTipo = "5";
        //Cedente.Carteira = "101";
        //Cedente.CedenteCOD = "33333334892001304444"; // 20 digitos (note que o final, é o numero da conta, sem os ultios 2 digitos)
        //Cedente.Convenio = "0000000000000000002222220"; // 25 digitos
        //Cedente.useSantander = true; //importante para gerar o código de barras correto (por questão de compatibilidade o padrão é false)

        // BRADESCO
        //Cedente.Banco = "237-2";
        //Cedente.Agencia = "1510";
        //Cedente.Conta = "001466-4";
        //Cedente.Carteira = "09";
        //Cedente.CedenteCOD = "00000000000001111111"; // 20 digitos

        // ITAU
        //Cedente.CedenteCOD = "514432001";
        //Cedente.Banco = "341-1";
        //Cedente.Agencia = "6260";
        //Cedente.Conta = "01607-3";
        //Cedente.Carteira = "109";

        // Banco do Brasil
        //Cedente.Banco = "001-9";
        //Cedente.Agencia = "294-1";
        //Cedente.Conta = "004570-6";
        //Cedente.Carteira = "18";
        //Cedente.Modalidade = "21";
        //Cedente.Convenio = "859120";

        // CAIXA
        //Cedente.Banco = "104";
        //Cedente.Agencia = "123-4";
        //Cedente.Conta = "5678-9";
        //Cedente.Carteira = "2";          // Código da Carteira
        //Cedente.Convenio = "02";         // CNPJ do PV da conta do cliente
        //Cedente.CodCedente = "455932";   // Código do Cliente(cedente)
        //Cedente.Modalidade = "14";       // G069 - CC = 14 (título Registrado emissão Cedente)
        //Cedente.Endereco = "Rua Sei la aonde";
        //Cedente.Informacoes =
        //    "SAC CAIXA: 0800 726 0101 (informações, reclamações, sugestões e elogios)<br/>" +
        //    "Para pessoas com deficiência auditiva ou de fala: 0800 726 2492<br/>" +
        //    "Ouvidoria: 0800 725 7474 (reclamações não solucionadas e denúncias)<br/>" +
        //    "<a href='http://caixa.gov.br' target='_blank'>caixa.gov.br</a>";
        //BoletoTextos.LocalPagamento = "PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE";

        // SICRED
        Cedente.Banco      = "748-2";
        Cedente.Agencia    = "1234-5";
        Cedente.Conta      = "98765-1";
        Cedente.CodCedente = "12345";
        Cedente.Modalidade = "04";
        Cedente.Layout     = LayoutTipo.Auto;

        // Cria uma instancia do gerador de arquivo que abstrai as classes individuais de geração
        LayoutBancos r = new LayoutBancos(); // classe genérica para qualquer banco, compatível até com ActiveX

        r.Init(Cedente);                     // define o cedente e o tipo de arquivo
        r.Lote = 1234;                       // Define o numero do lote!

        // É quase que obrigatporio para o sicredi
        r.onRegBoleto = r_onRegBoleto; // Para personalizar as linhas com os campos adicionais a todos registros
        // Mas há outra forma usando o 'SetRegKeyValue(key, valor);' em cada boleto info

        // É possível configurar o lote, por padrão é gerado AADDDHH (Ano, Dia do ano, Hora) obrigatório para bradesco
        // r.Lote += 2000000; // Ou é possivel usar a logica que quiser, por exemplo, inicia com 3 o numero do lote! (soma 20 anos)

        // Definição dos dados do sacado -  QUEM PAGA
        SacadoInfo Sacado = new SacadoInfo();

        Sacado.Sacado    = "TESTE OK (Teste para homologação)";
        Sacado.Documento = "12321321000112";
        Sacado.Endereco  = "RUA TESTE XXX";
        Sacado.Cidade    = "SÃO PAULO";
        Sacado.Bairro    = "JARDIM Y";
        Sacado.Cep       = "12345-678";
        Sacado.UF        = "SP";

        // Abaixo serão criados 5 boleto distintos para o mesmo sacado criado acima

        // Definição dos dados do boleto1
        BoletoInfo Boleto1 = new BoletoInfo();

        Boleto1.NossoNumero     = "2265";
        Boleto1.BoletoID        = 0000001;
        Boleto1.NumeroDocumento = Boleto1.NossoNumero;
        Boleto1.ValorDocumento  = 12.34;
        Boleto1.DataDocumento   = DateTime.Now;
        Boleto1.DataVencimento  = DateTime.Now.AddDays(5);
        Boleto1.Ocorrencia      = Ocorrencias.Remessa; // código 1

        // As linhas a seguir customiza qualquer valor sem precisar usar o evento 'r.onRegBoleto' o que torna a implementação mais simples
        // A forma mais pratica e segura é sempre usar os enumeradores
        // Mas é possivel usar as duas opções como neste exemplo, mas os valores personalizados tem sempre prioridade pois são inserridos por ultimo apos todos calculos, e processamento de eventos, portanto use com cuidado!
        Boleto1.SetRegEnumValue(CNAB400Remessa1Sicredi.TipoJuros, "B");  // (posição 19) // Apenas se atente para a diferença do nome para SetRegEnumValue()
        Boleto1.SetRegKeyValue("CNAB400Remessa1Sicredi.Alteracao", "E"); // (posição 71) // É possivel adicionar o nome e valor do enumerador, isso é compativel com VB6
        Boleto1.SetRegKeyValue("Emissao", "B");                          // posição 74 // ou simplesmente informar o nome do campo, mas cuidado pois há layouts que usam mais de um tipo de registro e as vezes tem nomes iguais mas as funções podem ser diferentes


        // Definição dos dados do boleto2
        BoletoInfo Boleto2 = new BoletoInfo();

        Boleto2.NossoNumero     = "2266";
        Boleto2.BoletoID        = 0000002;
        Boleto2.NumeroDocumento = Boleto2.NossoNumero;
        Boleto2.ValorDocumento  = 123.45;
        Boleto2.DataDocumento   = DateTime.Now;
        Boleto2.DataVencimento  = DateTime.Now.AddDays(10);
        Boleto2.Ocorrencia      = Ocorrencias.AlterarDados;                     // código 31
        Boleto2.Ocorrencia      = (Ocorrencias)31;                              // código 31
        Boleto2.SetRegEnumValue(CNAB240SegmentoPCaixa.BaixaDevolucaoCodigo, 1); // apenas para caixa força o campo para 1


        // Definição dos dados do boleto3
        BoletoInfo Boleto3 = new BoletoInfo();

        Boleto3.NossoNumero     = "2267";
        Boleto3.BoletoID        = 0000003;
        Boleto3.NumeroDocumento = Boleto3.NossoNumero;
        Boleto3.ValorDocumento  = 2345.67;
        Boleto3.DataDocumento   = DateTime.Now;
        Boleto3.DataVencimento  = DateTime.Now.AddDays(15);
        Boleto3.Ocorrencia      = Ocorrencias.Cancelamento;             // 35
        Boleto3.PercentualMulta = 0.02;                                 // Multa é quanto pagar a mais, apos o vencimento 2%)
        Boleto3.ValorMora       = (0.01 / 30) * Boleto3.ValorDocumento; // Mora é um valor a ser acrescido por dia apos o vencimento baseado (juros mensal total por mês 1%)

        // Definição dos dados do boleto4
        BoletoInfo Boleto4 = new BoletoInfo();

        Boleto4.NossoNumero     = "2268";
        Boleto4.BoletoID        = 0000004;
        Boleto4.NumeroDocumento = Boleto4.NossoNumero;
        Boleto4.ValorDocumento  = 3456.78;
        Boleto4.DataDocumento   = DateTime.Now;
        Boleto4.DataVencimento  = DateTime.Now.AddDays(20);
        Boleto4.Ocorrencia      = Ocorrencias.Remessa;
        Boleto4.PercentualMulta = 0.02;
        Boleto4.ValorMora       = (0.01 / 30) * Boleto4.ValorDocumento;
        Boleto4.Instrucao2      = 6;    // Potestar (dependendo do banco esse é o código de protesto: Caixa, BB, Santander)
        Boleto4.DiasProtesto    = 15;   // depois de 15 dias do vencimento

        // Definição dos dados do boleto5
        BoletoInfo Boleto5 = new BoletoInfo();

        Boleto5.NossoNumero     = "2269";
        Boleto5.BoletoID        = 0000005;
        Boleto5.NumeroDocumento = Boleto5.NossoNumero;
        Boleto5.ValorDocumento  = 42.54;
        Boleto5.DataDocumento   = DateTime.Now;
        Boleto5.DataVencimento  = DateTime.Now.AddDays(25);
        Boleto5.Ocorrencia      = Ocorrencias.Remessa;
        Boleto5.Instrucao2      = 6;    // Potestar (dependendo do banco esse é o código de protesto: Caixa, BB, Santander)
        Boleto5.DiasProtesto    = 15;   // depois de 15 dias do vencimento
        // Protesta e sem mora

        // Adiciona os boletos previamente definidos no layout de registro
        r.Add(Boleto1, Sacado);
        r.Add(Boleto2, Sacado);
        r.Add(Boleto3, Sacado);
        r.Add(Boleto4, Sacado);
        r.Add(Boleto5, Sacado);

        // Se quiser exibir o processamento dos campos detalhados (para ajudar a identificar os campos) descomente a linha abaixo
        // r.ShowDumpLine = false;

        // Gera o texto de registro (com as informações de dump habilitadas acima)
        txtOut.Text = r.Remessa();

        // Grava um novo arquivo final no diretório atual (mas sem as informações de dump, caso tenha habilitado acima, desabilite aqui abaixo)
        // r.ShowDumpLine = false;
        r.RemessaTo(MapPath("remessa.txt"));
        // FIM DO PROGRAMA EXEMPLO
        // =======================

        // As linhas abaixão são apenas um exemplo para ilustrar o funcionamento dos dados processados
        // Muito util para conferencia do que está sendo gerado no arquivo

        //gvHeader1.DataSource = r.Table(typeof(CNAB240HeaderArquivoCaixa));
        //gvHeader2.DataSource = r.Table(typeof(CNAB240HeaderLoteCaixa));
        //gvItens1.DataSource = r.Table(typeof(CNAB240SegmentoPCaixa));
        //gvItens2.DataSource = r.Table(typeof(CNAB240SegmentoQCaixa));
        //gvFooter1.DataSource = r.Table(typeof(CNAB240TrailerLoteCaixa));
        //gvFooter2.DataSource = r.Table(typeof(CNAB240TrailerArquivoCaixa));

        //gvHeader1.DataBind();
        //gvHeader2.DataBind();
        //gvItens1.DataBind();
        //gvItens2.DataBind();
        //gvFooter1.DataBind();
        //gvFooter2.DataBind();

        // Exibe os boletos em tela (mesma lógica do exemplo 'GeraVarios.aspx')
        foreach (string cNN in r.Boletos.NossoNumeros)
        {
            BoletoWeb blt = new BoletoWeb();
            blt.CssCell  = "BolCell";
            blt.CssField = "BolField";
            form1.Controls.Add(blt);
            r.Boletos[cNN].GeraInstrucoes();
            blt.MakeBoleto(Cedente, r.Boletos[cNN].Sacado, r.Boletos[cNN]);
        }
    }
    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;
        }
    }
Пример #20
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;
                }
            }
        }
    protected void btnTest_Click(object sender, EventArgs e)
    {

        // Definição dos dados do cedente - QUEM RECEBE / EMITE o boleto
        CedenteInfo Cedente = new CedenteInfo();
        Cedente.Cedente = "TESTE QUALQUER LTDA";
        Cedente.CNPJ = "12123123/0001-01";

        // ABAIXO DESCOMENTE o bloco de dados do banco que pretende usar

        // SANTANDER
        //Cedente.Banco = "033";
        //Cedente.Agencia = "1234-1";
        //Cedente.Conta = "001234567-8";
        //Cedente.CodCedente = "1231230";
        //Cedente.CarteiraTipo = "5";
        //Cedente.Carteira = "101";
        //Cedente.CedenteCOD = "33333334892001304444"; // 20 digitos (note que o final, é o numero da conta, sem os ultios 2 digitos)
        //Cedente.Convenio = "0000000000000000002222220"; // 25 digitos
        //Cedente.useSantander = true; //importante para gerar o código de barras correto (por questão de compatibilidade o padrão é false)

        // BRADESCO
        //Cedente.Banco = "237-2";
        //Cedente.Agencia = "1510";
        //Cedente.Conta = "001466-4";
        //Cedente.Carteira = "09";
        //Cedente.CedenteCOD = "00000000000001111111"; // 20 digitos

        // ITAU
        //Cedente.CedenteCOD = "514432001";
        //Cedente.Banco = "341-1";
        //Cedente.Agencia = "6260";
        //Cedente.Conta = "01607-3";
        //Cedente.Carteira = "109";

        // Banco do Brasil
        //Cedente.Banco = "001-9";
        //Cedente.Agencia = "294-1";
        //Cedente.Conta = "004570-6";
        //Cedente.Carteira = "18";
        //Cedente.Modalidade = "21";
        //Cedente.Convenio = "859120";

        // CAIXA 
        //Cedente.Banco = "104";
        //Cedente.Agencia = "123-4";
        //Cedente.Conta = "5678-9";
        //Cedente.Carteira = "2";          // Código da Carteira
        //Cedente.Convenio = "02";         // CNPJ do PV da conta do cliente
        //Cedente.CodCedente = "455932";   // Código do Cliente(cedente)
        //Cedente.Modalidade = "14";       // G069 - CC = 14 (título Registrado emissão Cedente)
        //Cedente.Endereco = "Rua Sei la aonde";
        //Cedente.Informacoes =
        //    "SAC CAIXA: 0800 726 0101 (informações, reclamações, sugestões e elogios)<br/>" +
        //    "Para pessoas com deficiência auditiva ou de fala: 0800 726 2492<br/>" +
        //    "Ouvidoria: 0800 725 7474 (reclamações não solucionadas e denúncias)<br/>" +
        //    "<a href='http://caixa.gov.br' target='_blank'>caixa.gov.br</a>";
        //BoletoTextos.LocalPagamento = "PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE";

        // SICRED
        Cedente.Banco = "748-2";
        Cedente.Agencia = "1234-5";
        Cedente.Conta = "98765-1";
        Cedente.CodCedente = "12345";
        Cedente.Modalidade = "04";
        Cedente.Layout = LayoutTipo.Auto;

        // Cria uma instancia do gerador de arquivo que abstrai as classes individuais de geração
        LayoutBancos r = new LayoutBancos(); // classe genérica para qualquer banco, compatível até com ActiveX
        r.Init(Cedente); // define o cedente e o tipo de arquivo
        r.Lote = 1234; // Define o numero do lote!

        // É quase que obrigatporio para o sicredi
        r.onRegBoleto = r_onRegBoleto; // Para personalizar as linhas com os campos adicionais a todos registros
        // Mas há outra forma usando o 'SetRegKeyValue(key, valor);' em cada boleto info

        // É possível configurar o lote, por padrão é gerado AADDDHH (Ano, Dia do ano, Hora) obrigatório para bradesco
        // r.Lote += 2000000; // Ou é possivel usar a logica que quiser, por exemplo, inicia com 3 o numero do lote! (soma 20 anos)

        // Definição dos dados do sacado -  QUEM PAGA
        SacadoInfo Sacado = new SacadoInfo();
        Sacado.Sacado = "TESTE OK (Teste para homologação)";
        Sacado.Documento = "12321321000112";
        Sacado.Endereco = "RUA TESTE XXX";
        Sacado.Cidade = "SÃO PAULO";
        Sacado.Bairro = "JARDIM Y";
        Sacado.Cep = "12345-678";
        Sacado.UF = "SP";

        // Abaixo serão criados 5 boleto distintos para o mesmo sacado criado acima

        // Definição dos dados do boleto1
        BoletoInfo Boleto1 = new BoletoInfo();
        Boleto1.NossoNumero = "2265";
        Boleto1.BoletoID = 0000001;
        Boleto1.NumeroDocumento = Boleto1.NossoNumero;
        Boleto1.ValorDocumento = 12.34;
        Boleto1.DataDocumento = DateTime.Now;
        Boleto1.DataVencimento = DateTime.Now.AddDays(5);
        Boleto1.Ocorrencia = Ocorrencias.Remessa; // código 1

        // As linhas a seguir customiza qualquer valor sem precisar usar o evento 'r.onRegBoleto' o que torna a implementação mais simples
        // A forma mais pratica e segura é sempre usar os enumeradores
        // Mas é possivel usar as duas opções como neste exemplo, mas os valores personalizados tem sempre prioridade pois são inserridos por ultimo apos todos calculos, e processamento de eventos, portanto use com cuidado!
        Boleto1.SetRegEnumValue(CNAB400Remessa1Sicredi.TipoJuros, "B");    // (posição 19) // Apenas se atente para a diferença do nome para SetRegEnumValue()
        Boleto1.SetRegKeyValue("CNAB400Remessa1Sicredi.Alteracao", "E");   // (posição 71) // É possivel adicionar o nome e valor do enumerador, isso é compativel com VB6
        Boleto1.SetRegKeyValue("Emissao", "B"); // posição 74 // ou simplesmente informar o nome do campo, mas cuidado pois há layouts que usam mais de um tipo de registro e as vezes tem nomes iguais mas as funções podem ser diferentes
        

        // Definição dos dados do boleto2
        BoletoInfo Boleto2 = new BoletoInfo();
        Boleto2.NossoNumero = "2266";
        Boleto2.BoletoID = 0000002;
        Boleto2.NumeroDocumento = Boleto2.NossoNumero;
        Boleto2.ValorDocumento = 123.45;
        Boleto2.DataDocumento = DateTime.Now;
        Boleto2.DataVencimento = DateTime.Now.AddDays(10);
        Boleto2.Ocorrencia = Ocorrencias.AlterarDados; // código 31
        Boleto2.Ocorrencia = (Ocorrencias)31; // código 31
        Boleto2.SetRegEnumValue(CNAB240SegmentoPCaixa.BaixaDevolucaoCodigo, 1); // apenas para caixa força o campo para 1


        // Definição dos dados do boleto3
        BoletoInfo Boleto3 = new BoletoInfo();
        Boleto3.NossoNumero = "2267";
        Boleto3.BoletoID = 0000003;
        Boleto3.NumeroDocumento = Boleto3.NossoNumero;
        Boleto3.ValorDocumento = 2345.67;
        Boleto3.DataDocumento = DateTime.Now;
        Boleto3.DataVencimento = DateTime.Now.AddDays(15);
        Boleto3.Ocorrencia = Ocorrencias.Cancelamento; // 35
        Boleto3.PercentualMulta = 0.02;                             // Multa é quanto pagar a mais, apos o vencimento 2%)
        Boleto3.ValorMora = (0.01 / 30) * Boleto3.ValorDocumento;   // Mora é um valor a ser acrescido por dia apos o vencimento baseado (juros mensal total por mês 1%)

        // Definição dos dados do boleto4
        BoletoInfo Boleto4 = new BoletoInfo();
        Boleto4.NossoNumero = "2268";
        Boleto4.BoletoID = 0000004;
        Boleto4.NumeroDocumento = Boleto4.NossoNumero;
        Boleto4.ValorDocumento = 3456.78;
        Boleto4.DataDocumento = DateTime.Now;
        Boleto4.DataVencimento = DateTime.Now.AddDays(20);
        Boleto4.Ocorrencia = Ocorrencias.Remessa;
        Boleto4.PercentualMulta = 0.02;
        Boleto4.ValorMora = (0.01 / 30) * Boleto4.ValorDocumento;
        Boleto4.Instrucao2 = 6;         // Potestar (dependendo do banco esse é o código de protesto: Caixa, BB, Santander)
        Boleto4.DiasProtesto = 15;      // depois de 15 dias do vencimento

        // Definição dos dados do boleto5
        BoletoInfo Boleto5 = new BoletoInfo();
        Boleto5.NossoNumero = "2269";
        Boleto5.BoletoID = 0000005;
        Boleto5.NumeroDocumento = Boleto5.NossoNumero;
        Boleto5.ValorDocumento = 42.54;
        Boleto5.DataDocumento = DateTime.Now;
        Boleto5.DataVencimento = DateTime.Now.AddDays(25);
        Boleto5.Ocorrencia = Ocorrencias.Remessa;
        Boleto5.Instrucao2 = 6;         // Potestar (dependendo do banco esse é o código de protesto: Caixa, BB, Santander)
        Boleto5.DiasProtesto = 15;      // depois de 15 dias do vencimento
        // Protesta e sem mora

        // Adiciona os boletos previamente definidos no layout de registro
        r.Add(Boleto1, Sacado);
        r.Add(Boleto2, Sacado);
        r.Add(Boleto3, Sacado);
        r.Add(Boleto4, Sacado);
        r.Add(Boleto5, Sacado);

        // Se quiser exibir o processamento dos campos detalhados (para ajudar a identificar os campos) descomente a linha abaixo
        // r.ShowDumpLine = false;

        // Gera o texto de registro (com as informações de dump habilitadas acima)
        txtOut.Text = r.Remessa();

        // Grava um novo arquivo final no diretório atual (mas sem as informações de dump, caso tenha habilitado acima, desabilite aqui abaixo)
        // r.ShowDumpLine = false;
        r.RemessaTo(MapPath("remessa.txt"));
        // FIM DO PROGRAMA EXEMPLO
        // =======================

        // As linhas abaixão são apenas um exemplo para ilustrar o funcionamento dos dados processados
        // Muito util para conferencia do que está sendo gerado no arquivo

        //gvHeader1.DataSource = r.Table(typeof(CNAB240HeaderArquivoCaixa));
        //gvHeader2.DataSource = r.Table(typeof(CNAB240HeaderLoteCaixa));
        //gvItens1.DataSource = r.Table(typeof(CNAB240SegmentoPCaixa));
        //gvItens2.DataSource = r.Table(typeof(CNAB240SegmentoQCaixa));
        //gvFooter1.DataSource = r.Table(typeof(CNAB240TrailerLoteCaixa));
        //gvFooter2.DataSource = r.Table(typeof(CNAB240TrailerArquivoCaixa));

        //gvHeader1.DataBind();
        //gvHeader2.DataBind();
        //gvItens1.DataBind();
        //gvItens2.DataBind();
        //gvFooter1.DataBind();
        //gvFooter2.DataBind();

        // Exibe os boletos em tela (mesma lógica do exemplo 'GeraVarios.aspx')
        foreach (string cNN in r.Boletos.NossoNumeros)
        {
            BoletoWeb blt = new BoletoWeb();
            blt.CssCell = "BolCell";
            blt.CssField = "BolField";
            form1.Controls.Add(blt);
            r.Boletos[cNN].GeraInstrucoes();
            blt.MakeBoleto(Cedente, r.Boletos[cNN].Sacado, r.Boletos[cNN]);
        }
    }