示例#1
0
    // 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
    }
示例#2
0
    protected void btnRemessa_Click(object sender, EventArgs e)
    {   // (Não é o foco validar dados de entrada, e sim testar a geração de registro)
        // Definição dos dados do 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);
    }
示例#3
0
    protected void btnRemessa_Click(object sender, EventArgs e)
    {   // (Não é o foco validar dados de entrada, e sim testar a geração de registro)
        //Definição dos dados do sacado
        SacadoInfo Sacado = new SacadoInfo();

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

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

        var r = new LayoutBancos();

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

        //r.ShowDumpReg = true;

        // customiza campos
        r.onRegBoleto = CustomRegBoleto;

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

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

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

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

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

        // o numero de exemplo '123' é apenas um numero de teste
        // este numero é muito importante que seja gerado de forma exclusiva e sequencial
        txtRemessa.Text = r.Remessa(); //r.CNAB400(123);
    }
    // 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]);
        }
    }
示例#7
0
    protected void btnRemessa_Click(object sender, EventArgs e)
    {   // (Não é o foco validar dados de entrada, e sim testar a geração de registro)

        // Definição dos dados do 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
    }
    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]);
        }
    }