BoletoNet / boletonet

Boleto.Net is a library developed for use in Brazil, given it has been programmed with Brazilian retail legislation and business rules for bank registered billing integration.
Apache License 2.0
480 stars 383 forks source link

Como trocar a Variação da Carteira do arquivo EDI do BB? #987

Open MarceloNeoTecnologia opened 10 months ago

MarceloNeoTecnologia commented 10 months ago

bom dia.... estou gerando boletos e arquivos de remessa do EDI para o BB.

porêm estou com uma msg de convenio errado e variação da carteira errado no EDI. porrem no boleto aparentemente esta tudo ok.

o problema é q eu troco a variação da carteira para "027", mas no arquivo do EDI sempre coloca "019".

mesmo forçando via hard code para "027" no edi aparece "019";

alguem poderia me ajudar com isso? como posso resolver isso?

vou por o codigo q utilizo.


            var boleto = new BoletoNet.Boleto(DateTime.Now.AddDays(10), 0.01m, "17", "1", "4340", "13321");
            var boletoBancario = new BoletoBancario();
            boletoBancario.Boleto = boleto;

            boletoBancario.Boleto.NumeroDocumento = numeroDocumento.Trim(); 

            // FORÇO A TROCA DA VARIACAO;
            // FORÇO A TROCA DA VARIACAO;

            var variacaoCarteira = "027";
            boletoBancario.Boleto.VariacaoCarteira = variacaoCarteira;

            // FORÇO A TROCA DA VARIACAO;
            // FORÇO A TROCA DA VARIACAO;

            boletoBancario.Boleto.LocalPagamento = "";
            boletoBancario.Boleto.Avalista = null;

            boletoBancario.Boleto.Cedente.Codigo = codigoNoBanco;
            boletoBancario.Boleto.Cedente.Carteira = carteira.Trim();
            boletoBancario.Boleto.Cedente.CPFCNPJ = _empresa.Cnpj.ToString();
            boletoBancario.Boleto.Cedente.Convenio = long.Parse(convenio);

            boletoBancario.Boleto.Cedente.Endereco = new BoletoNet.Endereco();
            boletoBancario.Boleto.Cedente.Endereco.Bairro = _empresa.Bairro.Trim();
            boletoBancario.Boleto.Cedente.Endereco.CEP = _empresa.CEP.ExtrairNumero().Trim();
            boletoBancario.Boleto.Cedente.Endereco.Cidade = _empresa.DsMunicipio?.Trim() ?? string.Empty;
            boletoBancario.Boleto.Cedente.Endereco.Complemento = "";
            boletoBancario.Boleto.Cedente.Endereco.Email = _empresa.Email.Trim();
            boletoBancario.Boleto.Cedente.Endereco.Numero = _empresa.Numero.Trim();
            boletoBancario.Boleto.Cedente.Endereco.UF = _empresa.SiglaUF?.Trim() ?? "BA";
            boletoBancario.Boleto.Cedente.Endereco.End = _empresa.Logradouro.Trim();

            boletoBancario.Boleto.Cedente.Nome = _empresa.Nome;

            boletoBancario.Boleto.Sacado.CPFCNPJ = Parcela.Titulo.Pagador.vl_cnpj_cpf.Trim();
            boletoBancario.Boleto.Sacado.Nome = Parcela.Titulo.Pagador.ds_nomereduzido.Trim();
            boletoBancario.Boleto.Sacado.Endereco.Bairro = Parcela.Titulo.Pagador.ds_bairro.Trim();
            boletoBancario.Boleto.Sacado.Endereco.CEP = Parcela.Titulo.Pagador.vl_cep.ExtrairNumero().Trim();
            boletoBancario.Boleto.Sacado.Endereco.Numero = Parcela.Titulo.Pagador.ds_logradouro.Trim();
            boletoBancario.Boleto.Sacado.Endereco.Cidade = Parcela.Titulo.Pagador.ds_municipio.Trim();
            boletoBancario.Boleto.Sacado.Endereco.Email = Parcela.Titulo.Pagador.ds_e_mail.Trim();
            boletoBancario.Boleto.Sacado.Endereco.End = Parcela.Titulo.Pagador.ds_endereco.Trim();
            boletoBancario.Boleto.Sacado.Endereco.Complemento = "";
            boletoBancario.Boleto.Sacado.Endereco.UF = Parcela.Titulo.Pagador.id_uf.SiglaEstado();

            boletoBancario.Boleto.DataVencimento = Parcela.DtVencimento;
            boletoBancario.Boleto.DataDocumento = Parcela.DtEmissaoDocumento;
            boletoBancario.Boleto.DataProcessamento = DateTime.Now;

            boletoBancario.Boleto.ValorBoleto = Parcela.ValorDevido;
            boletoBancario.Boleto.ValorDescontoAntecipacao = Parcela.VlDesconto;
            boletoBancario.Boleto.ValorDesconto = 0;
            boletoBancario.Boleto.Abatimento = 0;

            boletoBancario.Boleto.NumeroParcela = Parcela.IdParcela;
            boletoBancario.Boleto.TotalParcela = Parcela.Titulo?.QtdParcelas ?? 0;
            boletoBancario.Boleto.QuantidadeMoeda = 0;
            boletoBancario.Boleto.TipoDeCobranca = "1";

            boletoBancario.Boleto.EspecieDocumento = new EspecieDocumento(idBanco);
            boletoBancario.Boleto.EspecieDocumento.Codigo = "01";

            boletoBancario.Boleto.Remessa = new Remessa();
            boletoBancario.Boleto.Remessa.TipoDocumento = "1";
            boletoBancario.Boleto.Remessa.CodigoOcorrencia = "01";

            MensagemValidacao = string.Empty;

            try
            {
                boletoBancario.Boleto.Valida();
            }
            catch (Exception ex)
            {
                MensagemValidacao = ex.Message;
            }

            boletoBancario.GerarArquivoRemessa = true;
            boletoBancario.Boleto.Remessa = new Remessa {TipoDocumento = "1", CodigoOcorrencia = "01"};

                var memoryStr = new MemoryStream();

                var edi = new ArquivoRemessa(cnab);
                edi.NumeroConvenio = "3030720";
                var retorno = string.Empty;
                if (edi.ValidarArquivoRemessa("3030720", "1", boletoBancario.Boleto.Cedente, boletosEdi, 123, out retorno))
                {

                    var boletosEdi = new Boletos();
                    boletosEdi.Add(boletoBancario.Boleto);
                    edi.GerarArquivoRemessa("3030720", "1", boletoBancario.Boleto.Cedente, boletosEdi, memoryStr, 123);
                    BytesEdis = memoryStr.GetBuffer();
                }

segue imagem de como edi foi gerado, com a variação 019 e não 027 q eu queria

edi_variaco_carteira

Luis-Parra commented 3 months ago

@MarceloNeoTecnologia tenta jogar a carteira e a variação juntas, tive um problema parecido e pra mim deu certo dessa forma.

Seu código poderia ficar assim:

        var boleto = new BoletoNet.Boleto(DateTime.Now.AddDays(10), 0.01m, "17", "1", "4340", "13321");
        var boletoBancario = new BoletoBancario();
        boletoBancario.Boleto = boleto;

        boletoBancario.Boleto.NumeroDocumento = numeroDocumento.Trim(); 

        // FORÇO A TROCA DA VARIACAO;
        // FORÇO A TROCA DA VARIACAO;

        var variacaoCarteira = "027";
        var carteiraComVariacao = $"{carteira.Trim()}-{variacaoCarteira}" //variável recebendo a carteira e a variação
        boletoBancario.Boleto.VariacaoCarteira = variacaoCarteira;

        // FORÇO A TROCA DA VARIACAO;
        // FORÇO A TROCA DA VARIACAO;

        boletoBancario.Boleto.LocalPagamento = "";
        boletoBancario.Boleto.Avalista = null;

        boletoBancario.Boleto.Cedente.Codigo = codigoNoBanco;
        boletoBancario.Boleto.Cedente.Carteira = carteiraComVariacao; //atribuindo a variável no objeto

no caso eu criei a variável carteiraComVariacao recebendo a carteira concatenando com a variação dela, então o valor dela é "17-019". Depois eu atribuí essa variável no boletoBancario.Boleto.Cedente.Carteira.

Para o Banco do Brasil isso deve funcionar.