// Mesma logica do exemplo 'geravarios' protected void Page_Load(object sender, EventArgs e) { // Definição dos dados do cedente CedenteInfo Cedente = new CedenteInfo(); Cedente.Cedente = "Exemplo de empresa cedente"; Cedente.Endereco = "rua Qualquer no Bairro da Cidade"; Cedente.CNPJ = "12.345.678/00001-12"; Cedente.Banco = "104"; Cedente.Agencia = "4353"; Cedente.Conta = "00000939-9"; Cedente.Carteira = "2"; // 1-Registrada ou 2-Sem registro Cedente.CodCedente = "658857"; Cedente.Convenio = "1234"; // CNPJ do PV da conta do cliente = 00.360.305/4353-48 (usado em alguns casos) 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"; // Definição dos dados do sacado SacadoInfo Sacado = new SacadoInfo(); Sacado.Sacado = "Fabio Ferreira (Teste para homologação)"; Sacado.Documento = "123.456.789-99"; Sacado.Endereco = "Av. Paulista, 1234"; Sacado.Cidade = "São Paulo"; Sacado.Bairro = "Centro"; Sacado.Cep = "12345-123"; Sacado.UF = "SP"; Sacado.Avalista = "CNPJ: 123.456.789/00001-23"; // Para aprovar a homologação junto a caixa é necessário apresentar 10 boletos com os 10 digitos de controle da linha digitável diferentes // E mais outros 10 com o digito de controle do código de barras // Assim a ideia é criar 2 listas para ir memorizando os boletos já validos e deixa-los entrar em tela List <int> DAC1 = new List <int>(); List <int> DAC2 = new List <int>(); for (int nBoleto = 1001; nBoleto < 1100; nBoleto++) { // Definição dos dados do boleto de forma sequencial BoletoInfo Boleto = new BoletoInfo() { NumeroDocumento = nBoleto.ToString(), NossoNumero = nBoleto.ToString(), ValorDocumento = 123.45, DataVencimento = DateTime.Now, DataDocumento = DateTime.Now, }; // Componente HTML do boleto que poderá ser ou não colocado em tela BoletoWeb blt = new BoletoWeb(); // Junta as informações para fazer o calculo blt.MakeBoleto(Cedente, Sacado, Boleto); // A instancia 'blt' é apenas un Webcontrol que renderiza o boleto HTML, tudo fica dentro da propriedade 'Boleto' blt.Boleto.CalculaBoleto(); // 10491.23456 60000.200042 00000.000844 4 67410000012345 // 012345678901234567890123456789012345678901234567890123 // 000000000111111111122222222223333333333444444444455555 int D1 = int.Parse(blt.Boleto.LinhaDigitavel.Substring(38, 1)); int D2 = int.Parse(blt.Boleto.LinhaDigitavel.Substring(35, 1)); // De acordo com o banco: // Todos os Dígitos Verificadores Geral do Código de Barras possíveis(de 1 a 9) ou seja, campo 4 da Representação Numérica // Todas os Dígitos Verificadores do Campo Livre possíveis(de 0 a 9), 10ª posição do campo 3 da Representação Numérica bool lUsar = false; if (!DAC1.Contains(D1)) { lUsar = true; DAC1.Add(D1); } if (!DAC2.Contains(D2)) { lUsar = true; DAC2.Add(D2); } if (lUsar) { // Apenas configura o As classe CSS de layout blt.CssCell = "BolCell"; blt.CssField = "BolField"; // Adiciona a instancia na tela do boleto valido para uso form1.Controls.Add(blt); } // Quando todas as possibilidades concluidas em até 100 boletos, já pode terminar... if (DAC1.Count == 9 && DAC2.Count == 10) { break; // o Modulo 11 padrão não tem o digito Zero, mas o especial para calculo do nosso numero tem } // Se o boleto foi usado e não acabou, então gera uma quebra de linha if (lUsar) { form1.Controls.Add(new LiteralControl("<div style='page-break-after: always'><br/></div>")); } } // Em geral esse teste gera 11 ou mais boletos contemplando todos os casos // Salve como PDF e envie para homologação }
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 cedente - QUEM RECEBE / EMITE CedenteInfo Cedente = new CedenteInfo(); Cedente.Cedente = "Exemplo de empresa cedente"; Cedente.Banco = "237"; Cedente.Agencia = "1510"; Cedente.Conta = "001466-4"; Cedente.Carteira = "09"; Cedente.Modalidade = "05"; Cedente.CedenteCOD = "00000000000004047726"; // 20 digitos //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 = "98765-000"; Sacado.UF = "SP"; Sacado.Email = "*****@*****.**"; //Definição das Variáveis do boleto BoletoInfo Boleto; //WebControl BoletoWeb blt; // define o emissor da remessa // Remessa r = new Remessa(Cedente); CNAB400Bradesco r = new CNAB400Bradesco(); r.Cedente = Cedente; // O lote padrão gera AADDDHH (Ano, Dia do ano, Hora) r.NumeroLote += 2000000; // inicia com 3 o numero do lote! (soma 20 anos) //r.ShowDumpReg = true; // customiza campos para Bradesco // r.onRegItem += new RemessaReg(r_onRegItem); for (int n = 0; n < Int32.Parse(txtQTD.Text); n++) { 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"; 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 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); }
// Este exemplo foi baseado no exemplo: DirectPrint.aspx // Para criação de controles, os objetos devem ser incluidos sempre no Page_Init para não corromper a viewstate protected void Page_Init(object sender, EventArgs e) { DataTable tbDados; BoletoWeb blt; tbDados = new DataTable(); // Cria atabela em memoria // Cria as colunas nos respectivos tipos tbDados.Columns.Add("Nome", typeof(string)); tbDados.Columns.Add("Vencimento", typeof(DateTime)); tbDados.Columns.Add("Valor", typeof(double)); tbDados.Columns.Add("NossoNumero", typeof(int)); // insere os dados tbDados.Rows.Add("Fábio", new DateTime(2008, 12, 30), 123.45, 345678); tbDados.Rows.Add("Érika", new DateTime(2008, 7, 25), 60, 12332); tbDados.Rows.Add("Milena", new DateTime(2008, 10, 20), 10.30, 234); tbDados.Rows.Add("Cecília", DateTime.MinValue, 200.55, 456445); tbDados.Rows.Add("qualquer um", new DateTime(2008, 2, 12), 7890.5, 56756); int nBoleto = 0; foreach (DataRow row in tbDados.Rows) { // o principal é inserir o componente dinakicamente dentro de um container (controle que suporte outros controles, exemplo: Form, Panel) blt = new BoletoWeb(); // para caber 2 em uma página não será usado o recibo do sacado blt.ExibeReciboSacado = false; // configura as propriedades de estilo blt.CssCell = "BolCell"; blt.CssField = "BolField"; // Adiciona a instancia na tela form1.Controls.Add(blt); nBoleto++; // Mude o ZOOM do CSS BoletoWeb no arquivo .aspx para caber até 3 boletos, ai o módulo da divisão passa a ser 3 //if (nBoleto % 3 == 0) // Mas aplicar muito zoom pode dar problema na leitura do código de barras if (nBoleto % 2 == 0) { // somente nos boletos pares a iniciar de 2 força uma quebra de linha form1.Controls.Add(new LiteralControl("<div style='page-break-after: always'><br/></div>")); } else { // nos boletos impares adiciona a imagem de recorte form1.Controls.Add(new LiteralControl("<img src='imagens/corte.gif'>")); } // Note que na página ASPX, existe uma referencia a classe "BoeltoWeb" // Nesta classe CSS é definido o espaçamento entra cada boleto e a quebra de página // Depois segue normalmente as definições estaticas ou vindas do banco de dados // Definição dos dados do cedente CedenteInfo Cedente = new CedenteInfo(); Cedente.Cedente = "outro cedente!"; Cedente.Banco = "237"; Cedente.Agencia = "1234-5"; Cedente.Conta = "123456-7"; Cedente.Carteira = "06"; Cedente.Modalidade = "11"; // Definição dos dados do sacado SacadoInfo Sacado = new SacadoInfo(); Sacado.Sacado = (string)row["Nome"]; // Definição das Variáveis do boleto BoletoInfo Boleto = new BoletoInfo(); Boleto.DataVencimento = (DateTime)row["Vencimento"]; Boleto.ValorDocumento = (double)row["Valor"]; Boleto.NossoNumero = row["NossoNumero"].ToString(); Boleto.NumeroDocumento = Boleto.NossoNumero; blt.MakeBoleto(Cedente, Sacado, Boleto); } }
// Este exemplo foi baseado no exemplo: DirectPrint.aspx // Para criação de controles, os objetos devem ser incluidos sempre no Page_Init para não corromper a viewstate protected void Page_Init(object sender, EventArgs e) { DataTable tbDados; BoletoWeb blt; tbDados = new DataTable(); // Cria atabela em memoria // Cria as colunas nos respectivos tipos tbDados.Columns.Add("Nome", typeof(string)); tbDados.Columns.Add("Vencimento", typeof(DateTime)); tbDados.Columns.Add("Valor", typeof(double)); tbDados.Columns.Add("NossoNumero", typeof(int)); // insere os dados tbDados.Rows.Add("Fábio", new DateTime(2008, 12, 30), 123.45, 345678); tbDados.Rows.Add("Érika", new DateTime(2008, 7, 25), 60, 12332); tbDados.Rows.Add("Milena", new DateTime(2008, 10, 20), 10.30, 234); tbDados.Rows.Add("Cecília", DateTime.MinValue, 200.55, 456445); tbDados.Rows.Add("qualquer um", new DateTime(2008, 2, 12), 7890.5, 56756); int nBoleto = 0; foreach (DataRow row in tbDados.Rows) { // o principal é inserir o componente dinakicamente dentro de um container (controle que suporte outros controles, exemplo: Form, Panel) blt = new BoletoWeb(); // para caber 2 em uma página não será usado o recibo do sacado blt.ExibeReciboSacado = false; // configura as propriedades de estilo blt.CssCell = "BolCell"; blt.CssField = "BolField"; // Adiciona a instancia na tela form1.Controls.Add(blt); nBoleto++; // Mude o ZOOM do CSS BoletoWeb no arquivo .aspx para caber até 3 boletos, ai o módulo da divisão passa a ser 3 //if (nBoleto % 3 == 0) // Mas aplicar muito zoom pode dar problema na leitura do código de barras if (nBoleto % 2 == 0) // somente nos boletos pares a iniciar de 2 força uma quebra de linha form1.Controls.Add(new LiteralControl("<div style='page-break-after: always'><br/></div>")); else // nos boletos impares adiciona a imagem de recorte form1.Controls.Add(new LiteralControl("<img src='imagens/corte.gif'>")); // Note que na página ASPX, existe uma referencia a classe "BoeltoWeb" // Nesta classe CSS é definido o espaçamento entra cada boleto e a quebra de página // Depois segue normalmente as definições estaticas ou vindas do banco de dados // Definição dos dados do cedente CedenteInfo Cedente = new CedenteInfo(); Cedente.Cedente = "outro cedente!"; Cedente.Banco = "237"; Cedente.Agencia = "1234-5"; Cedente.Conta = "123456-7"; Cedente.Carteira = "06"; Cedente.Modalidade = "11"; // Definição dos dados do sacado SacadoInfo Sacado = new SacadoInfo(); Sacado.Sacado = (string)row["Nome"]; // Definição das Variáveis do boleto BoletoInfo Boleto = new BoletoInfo(); Boleto.DataVencimento = (DateTime)row["Vencimento"]; Boleto.ValorDocumento = (double)row["Valor"]; Boleto.NossoNumero = row["NossoNumero"].ToString(); Boleto.NumeroDocumento = Boleto.NossoNumero; blt.MakeBoleto(Cedente, Sacado, Boleto); } }
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 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 cedente - QUEM RECEBE / EMITE CedenteInfo Cedente = new CedenteInfo(); Cedente.Cedente = "Exemplo de empresa cedente"; Cedente.Banco = Request["banco"] ?? "341"; Cedente.Agencia = "1510"; Cedente.Conta = "001466-4"; Cedente.Carteira = "09"; Cedente.Modalidade = "05"; Cedente.CedenteCOD = "00000000000004047726"; // 20 digitos //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 = "98765-000"; Sacado.UF = "SP"; Sacado.Email = "*****@*****.**"; //Definição das Variáveis do boleto BoletoInfo Boleto; //WebControl BoletoWeb blt; // define o emissor da remessa // Remessa r = new Remessa(Cedente); CNAB400Bradesco r = new CNAB400Bradesco(); r.Cedente = Cedente; // O lote padrão gera AADDDHH (Ano, Dia do ano, Hora) r.NumeroLote += 2000000; // inicia com 3 o numero do lote! (soma 20 anos) //r.ShowDumpReg = true; // customiza campos para Bradesco // r.onRegItem += new RemessaReg(r_onRegItem); for (int n = 0; n < Int32.Parse(txtQTD.Text); n++) { 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"; 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); }
// Mesma logica do exemplo 'geravarios' protected void Page_Load(object sender, EventArgs e) { // Definição dos dados do cedente CedenteInfo Cedente = new CedenteInfo(); Cedente.Cedente = "Exemplo de empresa cedente"; Cedente.Endereco = "rua Qualquer no Bairro da Cidade"; Cedente.CNPJ = "12.345.678/00001-12"; Cedente.Banco = "104"; Cedente.Agencia = "4353"; Cedente.Conta = "00000939-9"; Cedente.Carteira = "2"; // 1-Registrada ou 2-Sem registro Cedente.CodCedente = "658857"; Cedente.Convenio = "1234"; // CNPJ do PV da conta do cliente = 00.360.305/4353-48 (usado em alguns casos) 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"; // Definição dos dados do sacado SacadoInfo Sacado = new SacadoInfo(); Sacado.Sacado = "Fabio Ferreira (Teste para homologação)"; Sacado.Documento = "123.456.789-99"; Sacado.Endereco = "Av. Paulista, 1234"; Sacado.Cidade = "São Paulo"; Sacado.Bairro = "Centro"; Sacado.Cep = "12345-123"; Sacado.UF = "SP"; Sacado.Avalista = "CNPJ: 123.456.789/00001-23"; // Para aprovar a homologação junto a caixa é necessário apresentar 10 boletos com os 10 digitos de controle da linha digitável diferentes // E mais outros 10 com o digito de controle do código de barras // Assim a ideia é criar 2 listas para ir memorizando os boletos já validos e deixa-los entrar em tela List<int> DAC1 = new List<int>(); List<int> DAC2 = new List<int>(); for (int nBoleto = 1001; nBoleto < 1100; nBoleto++) { // Definição dos dados do boleto de forma sequencial BoletoInfo Boleto = new BoletoInfo() { NumeroDocumento = nBoleto.ToString(), NossoNumero = nBoleto.ToString(), ValorDocumento = 123.45, DataVencimento = DateTime.Now, DataDocumento = DateTime.Now, }; // Componente HTML do boleto que poderá ser ou não colocado em tela BoletoWeb blt = new BoletoWeb(); // Junta as informações para fazer o calculo blt.MakeBoleto(Cedente, Sacado, Boleto); // A instancia 'blt' é apenas un Webcontrol que renderiza o boleto HTML, tudo fica dentro da propriedade 'Boleto' blt.Boleto.CalculaBoleto(); // 10491.23456 60000.200042 00000.000844 4 67410000012345 // 012345678901234567890123456789012345678901234567890123 // 000000000111111111122222222223333333333444444444455555 int D1 = int.Parse(blt.Boleto.LinhaDigitavel.Substring(38, 1)); int D2 = int.Parse(blt.Boleto.LinhaDigitavel.Substring(35, 1)); // De acordo com o banco: // Todos os Dígitos Verificadores Geral do Código de Barras possíveis(de 1 a 9) ou seja, campo 4 da Representação Numérica // Todas os Dígitos Verificadores do Campo Livre possíveis(de 0 a 9), 10ª posição do campo 3 da Representação Numérica bool lUsar = false; if (!DAC1.Contains(D1)) { lUsar = true; DAC1.Add(D1); } if (!DAC2.Contains(D2)) { lUsar = true; DAC2.Add(D2); } if (lUsar) { // Apenas configura o As classe CSS de layout blt.CssCell = "BolCell"; blt.CssField = "BolField"; // Adiciona a instancia na tela do boleto valido para uso form1.Controls.Add(blt); } // Quando todas as possibilidades concluidas em até 100 boletos, já pode terminar... if (DAC1.Count == 9 && DAC2.Count == 10) break; // o Modulo 11 padrão não tem o digito Zero, mas o especial para calculo do nosso numero tem // Se o boleto foi usado e não acabou, então gera uma quebra de linha if (lUsar) form1.Controls.Add(new LiteralControl("<div style='page-break-after: always'><br/></div>")); } // Em geral esse teste gera 11 ou mais boletos contemplando todos os casos // Salve como PDF e envie para homologação }