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); } }
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"); }
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); } }
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); }
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); }
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"); }
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); }
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); }
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"); }
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); } }
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"); }
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"); }
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); }
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; } }
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); }
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; } }
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]); } }