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 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 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); } }
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 btnRetorno_Click(object sender, EventArgs e) { // apenas alguns campos serão exibidos, e serão re-gerados os boletos baseados nos dados do retorno if (string.IsNullOrEmpty(txtRetorno.Text.Trim())) { return; } //CNAB400Bradesco r = new CNAB400Bradesco(); //MapPath("CB210900.RET")); // CNAB400Itau r = new CNAB400Itau(); //MapPath("CB210900.RET")); // r.Retorno(txtRetorno.Text); //CedenteInfo cedente = r.Cedente; Label lbl = new Label(); //dvBoletos.Controls.Add(lbl); //lbl.Text = "Cedente: " + cedente.Cedente + "<br/>"; var r = new LayoutBancos(); r.Init(Cedente); // ATENÇÃO: Um boleto pago vencido as vezes pode conter 2 registor, um altedando a data de vencimento e outro efetivando a baixa // r.ErroType = BoletoDuplicado.Ignore r.ErroType = BoletoDuplicado.Lista; int nLoops = 0; string cLinhas = txtRetorno.Text; do { nLoops++; lbl = new Label(); dvBoletos.Controls.Add(lbl); lbl.Text = "<b>Loop: " + nLoops + "</b><br/>"; r.Boletos.Clear(); var ret = r.Retorno(cLinhas); try { dtg.DataSource = ret.Table(ret.GetLayoutType(0)); dtg.DataBind(); } catch { } foreach (string nn in r.Boletos.NossoNumeros) { lbl = new Label(); dvBoletos.Controls.Add(lbl); var Boleto = r.Boletos[nn]; lbl.Text = string.Format("{0} {1:dd/MM/yyyy} {2:C} {3}<br/>\r\n", Boleto.NossoNumero, Boleto.DataVencimento, Boleto.ValorDocumento, Boleto.Ocorrencia); } if (r.Boletos.Duplicados != null && r.Boletos.Duplicados.Count > 0) { lbl = new Label(); dvBoletos.Controls.Add(lbl); lbl.Text = "<b>Duplicados:</b><br/>"; foreach (BoletoInfo Boleto in r.Boletos.Duplicados) { lbl = new Label(); dvBoletos.Controls.Add(lbl); lbl.Text = string.Format("{0} {1:dd/MM/yyyy} {2:C} {3}<br/>\r\n", Boleto.NossoNumero, Boleto.DataVencimento, Boleto.ValorDocumento, Boleto.Ocorrencia); } break; } else { // Verifica se mudou alguma coisa (r.ErroType = BoletoDuplicado.Ignore) if (cLinhas != r.Boletos.ErroLinhas) { // linhas que precisariam ser reprocessadas separadamente por qualquer motivo cLinhas = r.Boletos.ErroLinhas; } else { break; } } } while (!string.IsNullOrEmpty(cLinhas) && nLoops < 10); // Coloca um valor maximo por segurança }
protected void btnTest_Click(object sender, EventArgs e) { lblOut.Text = ""; try { /* Exemplo de retorno BRADESCO * 10205491613000192000000900462012390740000000000000000000000004000000000000000000530000000000000000000000000903190515000000000500000000000000000053040615000000001547823703152 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0800000000 000006 * 10205491613000192000000900462012390740000000000000000000000005000000000000000000610000000000000000000000000903190515000000000600000000000000000061050615000000001557823703152 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0800000000 000007 * 102054916130001920000009004620123907400000000000000000000000060000000000000000007P000000000000000000000000090319051500000000070000000000000000007P060615000000001567823703152 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0800000000 000008 * 10205491613000192000000900462012390740000000000000000000000007000000000000000000880000000000000000000000000903190515000000000800000000000000000088070615000000001577823703152 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0800000000 000009 * 102005478600001400000009004620124576700000000000000000000069050000000009000006905300000000000000000000000009322307150000006905000000000900000690530207150000000009540237 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 3300000000 000036 * 102005478600001400000009004620124576700000000000000000000069410000000009000006941P000000000000000000000000093223071500000069410000000009000006941P0907150000000048058237 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 3300000000 000037 * 102005478600001400000009004620124576700000000000000000000069680000000009000006968100000000000000000000000009322307150000006968000000000900000696811307150000000009800237 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 3300000000 000038 */ /* Exemplo de retorno SICOOB * 02RETORNO01COBRANÇA 30090000198889145823ELTON JOHN GOMES DA SILVA ME 756 - BANCOOB S/A 2203160000694 000001 * 1020569299500011230090000145823000000 000000056978010000000OU00000000000000000000 0205210316 210316000000001040010407190992103160000160000000000000000000000000000000000000000000000000000000000000000000000000010400000000000000000000000000000000000000000000000000000010000000000000 0000000000000000000000000000000000000000000000000000000002 * 1020569299500011230090000145823000000 000000056082010000000OU00000000000000000000 0205210316 200316000000002200010401160992103160000160000000000000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000010000000000000 0000000000000000000000000000000000000000000000000000000003 * 1020569299500011230090000145823000000 000000057281010000000OU00000000000000000000 0205210316 210316000000031850000108330992103160000160000000000000000000000000000000000000000000000000000000000000000000000000318500000000000000000000000000000000000000000000000000000010000000000000 0000000000000000000000000000000000000000000000000000000004 * 9027563009SICOOB NORTE AV. JONES DOS SANTOS NEVES CENTRO 29800000Barra de São Francisco ES220320160000000300001969859 000005 */ LayoutBancos r = new LayoutBancos(); // classe genérica para qualquer banco, compatível até com ActiveX // é necessário apenas informar o numero do banco do cedente para usar a rotina de retorno do banco correto //r.Init(new CedenteInfo { Banco = "001" }); // Banco do Brasil //r.Init(new CedenteInfo { Banco = "033" }); // Banespa (Santander) //r.Init(new CedenteInfo { Banco = "104" }); // Caixa //r.Init(new CedenteInfo { Banco = "237" }); // Brtadesco //r.Init(new CedenteInfo { Banco = "341" }); // Itau //r.Init(new CedenteInfo { Banco = "353" }); // Santander r.Init(new CedenteInfo { Banco = Request["banco"] ?? "341", Layout = LayoutTipo.Auto }); // Sicoob // Processar e identificar os registros Layout ret = r.Retorno(txtIn.Text); // Renderiza o conteudo lido //gv.DataSource = ret.Table(typeof(CNAB400Retorno1Bradesco)); //gv.DataBind(); // O resultado estará dentro de um array de boletos BoletoInfo Boleto; foreach (string nn in r.Boletos.NossoNumeros) { Boleto = r.Boletos[nn]; lblOut.Text += string.Format("{0} {1:dd/MM/yyyy} {2:C} <br/>\r\n", Boleto.NossoNumero, Boleto.DataVencimento, Boleto.ValorDocumento); } // uma opção mas simples é ler diretamente as linhas de um tipo de arquivo, mas devem ser exatamento do tipo correto // Tipo de estrutura a ser decodificada (enumerador de layout) //Type tp = typeof(CNAB240CobrancaRetorno); //Type tp = typeof(CNAB400Retorno1Bradesco); //Type tp = typeof(CNAB400Retorno1Itau); //Type tp = typeof(CNAB240SegmentoTCaixa); // A classe Layout tem diversos metodos genericos para fazer qualquer codificação e decodificação de textos de acordo com os tipos de enumeradores passados em seu contrutor //Layout lay = new Layout(tp); // Coloca o texto em questão para ser interpretado //lay.Conteudo = txtIn.Text; // Internamente a classe de Layour armazena todos os dados e por gerar outros objetos como um DataTable com uma das estruturas //gv.DataSource = lay.Table(tp); // Renderiza o conteudo lido //gv.DataBind(); } catch (Exception ex) { lblOut.Text += "<br/>ERRO: " + ex.Message; } }
protected void btnTest_Click(object sender, EventArgs e) { lblOut.Text = ""; try { /* Exemplo de retorno BRADESCO 10205491613000192000000900462012390740000000000000000000000004000000000000000000530000000000000000000000000903190515000000000500000000000000000053040615000000001547823703152 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0800000000 000006 10205491613000192000000900462012390740000000000000000000000005000000000000000000610000000000000000000000000903190515000000000600000000000000000061050615000000001557823703152 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0800000000 000007 102054916130001920000009004620123907400000000000000000000000060000000000000000007P000000000000000000000000090319051500000000070000000000000000007P060615000000001567823703152 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0800000000 000008 10205491613000192000000900462012390740000000000000000000000007000000000000000000880000000000000000000000000903190515000000000800000000000000000088070615000000001577823703152 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0800000000 000009 102005478600001400000009004620124576700000000000000000000069050000000009000006905300000000000000000000000009322307150000006905000000000900000690530207150000000009540237 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 3300000000 000036 102005478600001400000009004620124576700000000000000000000069410000000009000006941P000000000000000000000000093223071500000069410000000009000006941P0907150000000048058237 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 3300000000 000037 102005478600001400000009004620124576700000000000000000000069680000000009000006968100000000000000000000000009322307150000006968000000000900000696811307150000000009800237 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 3300000000 000038 */ /* Exemplo de retorno SICOOB 02RETORNO01COBRANÇA 30090000198889145823ELTON JOHN GOMES DA SILVA ME 756 - BANCOOB S/A 2203160000694 000001 1020569299500011230090000145823000000 000000056978010000000OU00000000000000000000 0205210316 210316000000001040010407190992103160000160000000000000000000000000000000000000000000000000000000000000000000000000010400000000000000000000000000000000000000000000000000000010000000000000 0000000000000000000000000000000000000000000000000000000002 1020569299500011230090000145823000000 000000056082010000000OU00000000000000000000 0205210316 200316000000002200010401160992103160000160000000000000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000010000000000000 0000000000000000000000000000000000000000000000000000000003 1020569299500011230090000145823000000 000000057281010000000OU00000000000000000000 0205210316 210316000000031850000108330992103160000160000000000000000000000000000000000000000000000000000000000000000000000000318500000000000000000000000000000000000000000000000000000010000000000000 0000000000000000000000000000000000000000000000000000000004 9027563009SICOOB NORTE AV. JONES DOS SANTOS NEVES CENTRO 29800000Barra de São Francisco ES220320160000000300001969859 000005 */ LayoutBancos r = new LayoutBancos(); // classe genérica para qualquer banco, compatível até com ActiveX // é necessário apenas informar o numero do banco do cedente para usar a rotina de retorno do banco correto //r.Init(new CedenteInfo { Banco = "001" }); // Banco do Brasil //r.Init(new CedenteInfo { Banco = "033" }); // Banespa (Santander) //r.Init(new CedenteInfo { Banco = "104" }); // Caixa //r.Init(new CedenteInfo { Banco = "237" }); // Brtadesco //r.Init(new CedenteInfo { Banco = "341" }); // Itau //r.Init(new CedenteInfo { Banco = "353" }); // Santander r.Init(new CedenteInfo { Banco = Request["banco"] ?? "341", Layout=LayoutTipo.Auto }); // Sicoob // Processar e identificar os registros Layout ret = r.Retorno(txtIn.Text); // Renderiza o conteudo lido //gv.DataSource = ret.Table(typeof(CNAB400Retorno1Bradesco)); //gv.DataBind(); // O resultado estará dentro de um array de boletos BoletoInfo Boleto; foreach (string nn in r.Boletos.NossoNumeros) { Boleto = r.Boletos[nn]; lblOut.Text += string.Format("{0} {1:dd/MM/yyyy} {2:C} <br/>\r\n", Boleto.NossoNumero, Boleto.DataVencimento, Boleto.ValorDocumento); } // uma opção mas simples é ler diretamente as linhas de um tipo de arquivo, mas devem ser exatamento do tipo correto // Tipo de estrutura a ser decodificada (enumerador de layout) //Type tp = typeof(CNAB240CobrancaRetorno); //Type tp = typeof(CNAB400Retorno1Bradesco); //Type tp = typeof(CNAB400Retorno1Itau); //Type tp = typeof(CNAB240SegmentoTCaixa); // A classe Layout tem diversos metodos genericos para fazer qualquer codificação e decodificação de textos de acordo com os tipos de enumeradores passados em seu contrutor //Layout lay = new Layout(tp); // Coloca o texto em questão para ser interpretado //lay.Conteudo = txtIn.Text; // Internamente a classe de Layour armazena todos os dados e por gerar outros objetos como um DataTable com uma das estruturas //gv.DataSource = lay.Table(tp); // Renderiza o conteudo lido //gv.DataBind(); } catch(Exception ex) { lblOut.Text += "<br/>ERRO: " + ex.Message; } }