RE: Arquiv o remessa Banco do B rasil CNAB 240 com c arteira 17 variação 019 [boletonet:46389 3]

Coordinator
Oct 28, 2013 at 11:38 PM
Oi klenioOnerio,

me mande sua classe Banco_Brasil.cs, para eu atualizar o projeto.

Abraço,

Stiven

[email removed]


Oct 28, 2013 at 11:43 PM
Eu estou usando a DLL da versão que esta disponível para Download, dai baixei a versão não compilada e esta assim:

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;

namespace BoletoNet
{
internal class ArquivoRemessaCNAB240 : AbstractArquivoRemessa, IArquivoRemessa
{

    #region Construtores

    public ArquivoRemessaCNAB240()
    {
        this.TipoArquivo = TipoArquivo.CNAB240;
    }

    #endregion

    #region Métodos de instância

    public override void GerarArquivoRemessa(string numeroConvenio, IBanco banco, Cedente cedente, Boletos boletos, Stream arquivo, int numeroArquivoRemessa)
    {
        try
        {
            int numeroRegistro = 3;
            int numeroRegistroDetalhe = 1;
            string strline;

            StreamWriter incluiLinha = new StreamWriter(arquivo);
            strline = banco.GerarHeaderRemessa(numeroConvenio, cedente, TipoArquivo.CNAB240, numeroArquivoRemessa);
            incluiLinha.WriteLine(strline);
            OnLinhaGerada(null, strline, EnumTipodeLinha.HeaderDeArquivo);

            strline = banco.GerarHeaderLoteRemessa(numeroConvenio, cedente, numeroArquivoRemessa, TipoArquivo.CNAB240);
            incluiLinha.WriteLine(strline);
            OnLinhaGerada(null, strline, EnumTipodeLinha.HeaderDeLote);

            if (banco.Codigo != 341)
            {
                foreach (Boleto boleto in boletos)
                {
                    boleto.Banco = banco;
                    strline = boleto.Banco.GerarDetalheSegmentoPRemessa(boleto, numeroRegistroDetalhe, numeroConvenio);
                    incluiLinha.WriteLine(strline);
                    OnLinhaGerada(boleto, strline, EnumTipodeLinha.DetalheSegmentoP);
                    numeroRegistro++;
                    numeroRegistroDetalhe++;

                    strline = boleto.Banco.GerarDetalheSegmentoQRemessa(boleto, numeroRegistroDetalhe, TipoArquivo.CNAB240);
                    incluiLinha.WriteLine(strline);
                    OnLinhaGerada(boleto, strline, EnumTipodeLinha.DetalheSegmentoQ);
                    numeroRegistro++;
                    numeroRegistroDetalhe++;

                    if (boleto.ValorMulta > 0)
                    {
                        strline = boleto.Banco.GerarDetalheSegmentoRRemessa(boleto, numeroRegistroDetalhe, TipoArquivo.CNAB240);
                        incluiLinha.WriteLine(strline);
                        OnLinhaGerada(boleto, strline, EnumTipodeLinha.DetalheSegmentoR);
                        numeroRegistro++;
                        numeroRegistroDetalhe++;
                    }
                }

                numeroRegistro--;
                strline = banco.GerarTrailerLoteRemessa(numeroRegistro);
                incluiLinha.WriteLine(strline);
                OnLinhaGerada(null, strline, EnumTipodeLinha.TraillerDeLote);

                numeroRegistro++;
                numeroRegistro++;

                strline = banco.GerarTrailerArquivoRemessa(numeroRegistro);
                incluiLinha.WriteLine(strline);
                OnLinhaGerada(null, strline, EnumTipodeLinha.TraillerDeArquivo);

                incluiLinha.Close();
            }
            else
            {
                foreach (Boleto boleto in boletos)
                {
                    boleto.Banco = banco;
                    strline = boleto.Banco.GerarDetalheRemessa(boleto, numeroRegistroDetalhe, TipoArquivo.CNAB240);
                    incluiLinha.WriteLine(strline);
                    OnLinhaGerada(boleto, strline, EnumTipodeLinha.DetalheSegmentoP);
                    numeroRegistro++;
                    numeroRegistroDetalhe++;
                }

                numeroRegistro--;
                strline = banco.GerarTrailerLoteRemessa(numeroRegistro);
                incluiLinha.WriteLine(strline);
                OnLinhaGerada(null, strline, EnumTipodeLinha.TraillerDeLote);

                numeroRegistro++;
                numeroRegistro++;

                strline = banco.GerarTrailerArquivoRemessa(numeroRegistro);
                incluiLinha.WriteLine(strline);
                OnLinhaGerada(null, strline, EnumTipodeLinha.TraillerDeArquivo);

                incluiLinha.Close();
            }
        }
        catch (Exception ex)
        {
            throw new Exception("Erro ao gerar arquivo remessa.", ex);
        }
    }

    #endregion

}
}
Oct 28, 2013 at 11:48 PM
Classe Banco_Brasil.cs


using System;
using System.Globalization;
using System.Web.UI;
using Microsoft.VisualBasic;

[assembly: WebResource("BoletoNet.Imagens.001.jpg", "image/jpg")]
namespace BoletoNet
{
/// <summary>
/// Classe referente ao Banco do Brasil
/// </summary>
internal class Banco_Brasil : AbstractBanco, IBanco
{

    #region Variáveis

    private string _dacNossoNumero = string.Empty;
    private int _dacBoleto = 0;

    #endregion

    #region Construtores

    internal Banco_Brasil()
    {
        try
        {
            this.Codigo = 1;
            this.Digito = "9";
            this.Nome = "Banco do Brasil";
        }
        catch (Exception ex)
        {
            throw new Exception("Erro ao instanciar objeto.", ex);
        }
    }
    #endregion

    #region Métodos de Instância

    /// <summary>
    /// Validações particulares do Banco do Brasil
    /// </summary>
    public override void ValidaBoleto(Boleto boleto)
    {
        if (string.IsNullOrEmpty(boleto.Carteira))
            throw new NotImplementedException("Carteira não informada. Utilize a carteira 11, 16, 17, 18, 18-019, 18-027, 18-035 ou 18-140.");

        //Verifica as carteiras implementadas
        if (!boleto.Carteira.Equals("11") &
            !boleto.Carteira.Equals("16") &
            !boleto.Carteira.Equals("17") &
            !boleto.Carteira.Equals("17-019") &
            !boleto.Carteira.Equals("18") &
            !boleto.Carteira.Equals("18-019") &
            !boleto.Carteira.Equals("18-027") &
            !boleto.Carteira.Equals("18-035") &
            !boleto.Carteira.Equals("18-140"))

            throw new NotImplementedException("Carteira não informada. Utilize a carteira 11, 16, 17, 17-019, 18, 18-019, 18-027, 18-035 ou 18-140.");

        //Verifica se o nosso número é válido
        if (Utils.ToString(boleto.NossoNumero) == string.Empty)
            throw new NotImplementedException("Nosso número inválido");


        #region Carteira 11
        //Carteira 18 com nosso número de 11 posições
        if (boleto.Carteira.Equals("11"))
        {
            if (!boleto.TipoModalidade.Equals("21"))
            {
                if (boleto.NossoNumero.Length > 11)
                    throw new NotImplementedException(string.Format("Para a carteira {0}, a quantidade máxima são de 11 de posições para o nosso número", boleto.Carteira));

                if (boleto.Cedente.Convenio.ToString().Length == 6)
                    boleto.NossoNumero = string.Format("{0}{1}", boleto.Cedente.Convenio, Utils.FormatCode(boleto.NossoNumero, 11));
                else
                    boleto.NossoNumero = Utils.FormatCode(boleto.NossoNumero, 11);
            }
            else
            {
                if (boleto.Cedente.Convenio.ToString().Length != 6)
                    throw new NotImplementedException(string.Format("Para a carteira {0} e o tipo da modalidade 21, o número do convênio são de 6 posições", boleto.Carteira));

                boleto.NossoNumero = Utils.FormatCode(boleto.NossoNumero, 17);
            }
        }
        #endregion Carteira 11

        #region Carteira 16
        //Carteira 18 com nosso número de 11 posições
        if (boleto.Carteira.Equals("16"))
        {
            if (!boleto.TipoModalidade.Equals("21"))
            {
                if (boleto.NossoNumero.Length > 11)
                    throw new NotImplementedException(string.Format("Para a carteira {0}, a quantidade máxima são de 11 de posições para o nosso número", boleto.Carteira));

                if (boleto.Cedente.Convenio.ToString().Length == 6)
                    boleto.NossoNumero = string.Format("{0}{1}", boleto.Cedente.Convenio, Utils.FormatCode(boleto.NossoNumero, 11));
                else
                    boleto.NossoNumero = Utils.FormatCode(boleto.NossoNumero, 11);
            }
            else
            {
                if (boleto.Cedente.Convenio.ToString().Length != 6)
                    throw new NotImplementedException(string.Format("Para a carteira {0} e o tipo da modalidade 21, o número do convênio são de 6 posições", boleto.Carteira));

                boleto.NossoNumero = Utils.FormatCode(boleto.NossoNumero, 17);
            }
        }
        #endregion Carteira 16

        #region Carteira 17
        //Carteira 17
        if (boleto.Carteira.Equals("17"))
        {
            switch (boleto.Cedente.Convenio.ToString().Length)
            {
                //O BB manda como padrão 7 posições, mas é possível solicitar um convênio com 6 posições na carteira 17
                case 6:
                    if (boleto.NossoNumero.Length > 12)
                        throw new NotImplementedException(string.Format("Para a carteira {0}, a quantidade máxima são de 12 de posições para o nosso número", boleto.Carteira));
                    boleto.NossoNumero = Utils.FormatCode(boleto.NossoNumero, 12);
                    break;
                case 7:
                    if (boleto.NossoNumero.Length > 17)
                        throw new NotImplementedException(string.Format("Para a carteira {0}, a quantidade máxima são de 10 de posições para o nosso número", boleto.Carteira));
                    boleto.NossoNumero = string.Format("{0}{1}", boleto.Cedente.Convenio, Utils.FormatCode(boleto.NossoNumero, 10));
                    break;
                default:
                    throw new NotImplementedException(string.Format("Para a carteira {0}, o número do convênio deve ter 6 ou 7 posições", boleto.Carteira));
            }
        }
        #endregion Carteira 17

        #region Carteira 17-019
        //Carteira 17, com variação 019
        if (boleto.Carteira.Equals("17-019"))
        {
            /*
             * Convênio de 7 posições
             * Nosso Número com 17 posições
             */
            if (boleto.Cedente.Convenio.ToString().Length == 7)
            {
                if (boleto.NossoNumero.Length > 10)
                    throw new NotImplementedException(string.Format("Para a carteira {0}, a quantidade máxima são de 10 de posições para o nosso número", boleto.Carteira));

                boleto.NossoNumero = string.Format("{0}{1}", boleto.Cedente.Convenio, Utils.FormatCode(boleto.NossoNumero, 10));
            }
            /*
             * Convênio de 6 posições
             * Nosso Número com 11 posições
             */
            else if (boleto.Cedente.Convenio.ToString().Length == 6)
            {
                //Nosso Número com 17 posições
                if ((boleto.Cedente.Codigo.ToString().Length + boleto.NossoNumero.Length) > 11)
                    throw new NotImplementedException(string.Format("Para a carteira {0}, a quantidade máxima são de 11 de posições para o nosso número. Onde o nosso número é formado por CCCCCCNNNNN-X: C -> número do convênio fornecido pelo Banco, N -> seqüencial atribuído pelo cliente e X -> dígito verificador do “Nosso-Número”.", boleto.Carteira));

                boleto.NossoNumero = string.Format("{0}{1}", boleto.Cedente.Convenio, Utils.FormatCode(boleto.NossoNumero, 5));
            }
            /*
              * Convênio de 4 posições
              * Nosso Número com 11 posições
              */
            else if (boleto.Cedente.Convenio.ToString().Length == 4)
            {
                if (boleto.NossoNumero.Length > 7)
                    throw new NotImplementedException(string.Format("Para a carteira {0}, a quantidade máxima são de 7 de posições para o nosso número [{1}]", boleto.Carteira, boleto.NossoNumero));

                boleto.NossoNumero = string.Format("{0}{1}", boleto.Cedente.Convenio, Utils.FormatCode(boleto.NossoNumero, 7));
            }
            else
                boleto.NossoNumero = Utils.FormatCode(boleto.NossoNumero, 11);
        }
        #endregion Carteira 17-019

        #region Carteira 18
        //Carteira 18 com nosso número de 11 posições
        if (boleto.Carteira.Equals("18"))
            boleto.NossoNumero = Utils.FormatCode(boleto.NossoNumero, 11);
        #endregion Carteira 18

        #region Carteira 18-019
        //Carteira 18, com variação 019
        if (boleto.Carteira.Equals("18-019"))
        {
            /*
             * Convênio de 7 posições
             * Nosso Número com 17 posições
             */
            if (boleto.Cedente.Convenio.ToString().Length == 7)
            {
                if (boleto.NossoNumero.Length > 10)
                    throw new NotImplementedException(string.Format("Para a carteira {0}, a quantidade máxima são de 10 de posições para o nosso número", boleto.Carteira));

                boleto.NossoNumero = string.Format("{0}{1}", boleto.Cedente.Convenio, Utils.FormatCode(boleto.NossoNumero, 10));
            }
            /*
             * Convênio de 6 posições
             * Nosso Número com 11 posições
             */
            else if (boleto.Cedente.Convenio.ToString().Length == 6)
            {
                //Modalidades de Cobrança Sem Registro – Carteira 16 e 18
                //Nosso Número com 17 posições
                if (!boleto.TipoModalidade.Equals("21"))
                {
                    if ((boleto.Cedente.Codigo.ToString().Length + boleto.NossoNumero.Length) > 11)
Oct 28, 2013 at 11:49 PM
Vou mandar no e-mail.. aqui nao da
Feb 24, 2014 at 5:11 PM
klenioOnerio wrote:
Vou mandar no e-mail.. aqui nao da
Boa tarde será que pode me enviar o arquivo para geração de boleto bb carteira 17 019
Mar 14, 2014 at 10:11 PM
Boa Noite, também estou precisando gerar boleto para BB, você poderia me passar o projeto?

Obrigado,

Carlos Mattos
carlos.mattos1@gmail.com
Apr 10, 2014 at 3:46 PM
Edited Apr 10, 2014 at 3:49 PM
Alguém sabe se é possível preencher o nosso numero apenas com zeros?

Numa comunicação, o Banco do Brasil falou que o segmento Detalhe P Reg. 0001-Col. 038 / 054 deve ser preenchido com 17 zeros, pois a numeração é a cargo do banco.

Agradeço e aguardo uma resposta vossa.

Obrigado!
cbevilaqua@raro.com.br