Arquivo Remessa e Retorno Bradesco

May 27, 2012 at 1:45 AM

Boa noite amigos,

Alguem já conseguiu gerar o arquivo Remessa do Bradesco, e conseguiu ler o arquivo retorno que possa passar o código de exemplo.

Developer
May 27, 2012 at 4:16 AM

Olá serpb.

Estou desenvolvendo remessa/retorno para bradesco e estou na fase de validação.  Logo mais terei as respostas e solicitarei para atualizar.

Abraços,

May 29, 2012 at 8:07 PM

Alguma novidade? Também estou tentando gerar o arquivo de remessa!

Developer
May 30, 2012 at 2:49 PM

Olá pessoal !

Estou fazendo a validação/homologação do processo Bradesco, neste momento.  Preciso fazer alguns ajustes no código.  Logo que tenha a resposta eu posto e atualizo os fontes.

Abraços,

Developer
Jun 2, 2012 at 7:10 PM

Olá Pessoal.

Validei a REMESSA com Bradesco e Itaú.  Os arquivos foram aceitos e não houveram inconsistencias.

O retorno parece que está normal.

Coloquei nova versão (91939).

Abraços,

Jun 4, 2012 at 6:45 PM

Olá Jsoda

Pode me informar como informo a multa para o arquivo remessa?

Boleto b = new Boleto(...);

b.ValorDesconto = 143.06m;
b.DataDesconto = new DateTime(2012, 05, 10);
b.DataMulta = vencimento.AddDays(1);
b.ValorMulta = 2.00m;
b.JurosMora = 0.14m;

Boletos boletos = new Boletos();
boletos.Add(b);

objREMESSA.GerarArquivoRemessa("168", new Banco(237), c, boletos, objFILESTREAM, 1);

O arquivo remessa está sendo gerado, até aí ok. Mas não está colocando a multa no campo. Pode me ajudar?

Abraços

Developer
Jun 4, 2012 at 11:02 PM

Olá midnait.

Pelo que vi no seu código, estamos falando de BRADESCO, certo?

Bom, pelas informações que recebi o SuportePJ Bradesco, no remessa do mesmo, você só pode informar o Percentual da Multa.

Portanto, atribua o percentual da multa na variável "b.PercMulta".  No entanto, esse campo não está implementado na REMESSA Bradesco.

O manual não diz muita coisa a respeito, mas não existe o campo Valor de Multa, apenas percentual.

Abraços,

Developer
Jun 5, 2012 at 12:27 AM

Olá midnait.

Fiz alguns ajustes no código e subi nova versão.

Você pode fazer assim, ... informe se vai utilizar a MULTA e informe o percentual:

b.TemMulta = True;

b.PercMulta = 2.00; (Percentual de multa em 2%) < -----Desculpe, não sou desenvolvedor C#, mas quebro um galho.

Abraços,

Jun 5, 2012 at 1:08 PM

Olá Jsoda

Primeiro, grato pela resposta e pelo seu tempo. =)

Quanto ao código, sou VBnauta, usei o exemplo que vem no download. =]

Bom, que acha de usar apenas o PercentualMulta? Afinal, If PercentualMulta > 0 Then .....  dessa forma não precisaria criar uma nova propriedade no objeto.

Aproveitando: fiz algumas correções, como replace "-/" por "" (estava dando erro) e outras coisinhas más, como disponibilizo para você centralizar?

Abraços

Jun 5, 2012 at 2:40 PM

Olá Jsoda

Só complementando:

Na verdade como é para geração de arquivo remessa, o percentual da multa deve sempre constar no arquivo, independente de condicionantes, afinal, o Bradesco só vai calcular o valor se a pessoa for pagar com atraso. Pela lógica dentro do arquivo remessa constará valor do boleto, data limite para pagamento sem multa, percentual de multa se passar dessa data e percentual de juros de mora ao dia.

Então não há a necessidade de nenhum If TemMulta ou PercentualMulta > 0, apenas jogar o valor do percentualmulta na posição dentro do arquivo, afinal, o percentual pode ser zero também.

Perdi algo do raciocínio?

Abraços

Developer
Jun 5, 2012 at 5:13 PM
Edited Jun 5, 2012 at 5:14 PM

Ola midnait.

Pensei nisso também. Mas precisava rever meus sistemas e tenho algumas particularidades com meus clientes: As informações de MULTA e MORA só ficam na impressão do boleto e na REMESSA, o meu cliente não deseja que seus clientes paguem essa multa (estranho, né). Foi de momento.  Passe seu código que eu analiso e coloco no ar, se for o caso.

Vou rever meu sistema e adequá-lo. Sou VB também.

Abraços,

Developer
Jun 5, 2012 at 5:15 PM
midnait wrote:

Olá Jsoda

Primeiro, grato pela resposta e pelo seu tempo. =)

Quanto ao código, sou VBnauta, usei o exemplo que vem no download. =]

Bom, que acha de usar apenas o PercentualMulta? Afinal, If PercentualMulta > 0 Then .....  dessa forma não precisaria criar uma nova propriedade no objeto.

Aproveitando: fiz algumas correções, como replace "-/" por "" (estava dando erro) e outras coisinhas más, como disponibilizo para você centralizar?

Abraços

Onde é esse Replace() ?

Abraços,

Developer
Jun 5, 2012 at 6:05 PM
Edited Jun 5, 2012 at 6:06 PM
midnait wrote:

Olá Jsoda

Só complementando:

Na verdade como é para geração de arquivo remessa, o percentual da multa deve sempre constar no arquivo, independente de condicionantes, afinal, o Bradesco só vai calcular o valor se a pessoa for pagar com atraso. Pela lógica dentro do arquivo remessa constará valor do boleto, data limite para pagamento sem multa, percentual de multa se passar dessa data e percentual de juros de mora ao dia.

Então não há a necessidade de nenhum If TemMulta ou PercentualMulta > 0, apenas jogar o valor do percentualmulta na posição dentro do arquivo, afinal, o percentual pode ser zero também.

Perdi algo do raciocínio?

Abraços

Dei uma olhada no manual, e existe necessidade de desvio, pois tem um campo antes do percentual que definirá se existe multa a ser cobrada ou não (pag.9/57 do manual).

Farei assim então:

if (boleto.PercMulta > 0)

{

_detalhe += "2"; 

        _detalhe += Utils.FitStringLength(boleto.PercMulta.ToString("0.00").Replace(",", ""), 4, 4, '0', 0, true, true, true); //Perentual Multa 9(2)V99 - (04)

}

else

{

_detalhe += "0";

        _detalhe += "0000";

 }

Acho que assim resolve, né?  Se OK, depois subo atualização.

Jun 5, 2012 at 7:44 PM

Olá Jsoda

Fui seguindo linha a linha novamente, até achar! =)

Arquivo: Banco_Bradesco.cs

Sub: GerarDetalheRemessaCNAB400(...)

Linha (observe o replace "/-" ):

                ////Identificação do Título no Banco (12, A)
                _detalhe += Utils.FitStringLength(boleto.NossoNumero, 11, 11, '0', 0, true, true, true); //Nosso Numero (11)
                _detalhe += Mod11Bradesco(boleto.Carteira + boleto.NossoNumero.Replace("/", "").Replace("-", ""), 7); // Digito de Auto Conferencia do Nosso Número (01)

No cálculo do Módulo 11 ele tenta usar '/' e '-' e dá erros.
O filtro poderia ser feito na Mod11, mas como funcionava criando os boletos do exemplo e dava erro apenas ao pedir para gerar o arquivo remessa, fui seguindo procurando o problema.
Adaptei o exemplo daqui do site para gerar o boleto e o arquivo remessa:
Arquivo Bancos/Bradesco.aspx (o site gera o boleto e eu incluí a geração da remessa logo abaixo para testar)
        DateTime vencimento = new DateTime(2012, 05, 31);
        Instrucao_Bradesco item = new Instrucao_Bradesco(9, 10);
        Cedente c = new Cedente("00.000.000/0000-00", "Centro Educ. Balão Mágico", "2541", "0", "168", "6");
        c.Codigo = 16825412;
        EspecieDocumento ed = new EspecieDocumento(237, 1);

        //Carteiras 
        Boleto b = new Boleto(vencimento, 466m, "09", "37465", c, ed);
        b.NumeroDocumento = "37465";

        b.Sacado = new Sacado("000.000.000-00", "Nome do seu Cliente");
        b.Sacado.Endereco.End = "Endereço do seu Cliente ";
        b.Sacado.Endereco.Bairro = "Bairro";
        b.Sacado.Endereco.Cidade = "Cidade";
        b.Sacado.Endereco.CEP = "00000000";
        b.Sacado.Endereco.UF = "UF";     

        item.Descricao += " após " + item.QuantidadeDias.ToString() + " dias corridos do vencimento.";
        b.Instrucoes.Add(item); //"Não Receber após o vencimento");

        // aqui comecei as tentativas de multa de que falamos
        b.ValorDesconto = 143.06m;
        b.DataDesconto = new DateTime(2012, 05, 10);
        b.DataMulta = vencimento.AddDays(1);
        b.ValorMulta = 2.00m;
        b.JurosMora = 0.14m;
        
        Instrucao i = new Instrucao(237);
        i.Descricao = "Nova Instrução";
        b.Instrucoes.Add(i);

        boletoBancario.Boleto = b;
        boletoBancario.Boleto.Valida();

        boletoBancario.MostrarComprovanteEntrega = (Request.Url.Query == "?show");

        Boletos boletos = new Boletos();
        boletos.Add(b);

// aqui eu inseri a tentativa de gerar a remessa usando o objeto Boleto criado acima
        // cria objeto STREAM
        FileStream objFILESTREAM = default(FileStream);

        // cria objeto do arquivo remessa
        ArquivoRemessa objREMESSA = default(ArquivoRemessa);

                //Santander, Bradesco e Ita�
                objREMESSA = new ArquivoRemessa(TipoArquivo.CNAB400);

        string strMSG;
        try
        {
            //Abre arquivo STREAM
            objFILESTREAM = File.Create("C:\\Users\\marcio.maciel\\Documents\\Projetos\\BoletoNET\\Boleto.Net\\Boleto.Net.Site\\Remessas\\teste.rem");

            //Gera o arquivo REMESSA
            objREMESSA.GerarArquivoRemessa("168", new Banco(237), c, boletos, objFILESTREAM, 1); // F9 até achar o problema do "/-"
        }
        catch (Exception ex)
        {

            objREMESSA = null;
            objFILESTREAM = null;
            
            strMSG = "Houve um problema na geração do arquivo REMESSA. \n";
            strMSG += "Erro: " + ex.Message;
            Response.Write("<script>alert('" + strMSG + "');</script>");
            return;
        }

        objREMESSA = null;
        objFILESTREAM = null;

        strMSG = "Arquivo de REMESSA [ teste.rem ] foi gerado com sucesso !";
        Response.Write("<script>alert('" + strMSG + "');</script>");

Após o Replace, arquivo remessa criado com sucesso. Então abri o arquivo remessa e fui seguindo caracter por caracter com um manual do Bradesco do lado. =)
Então percebi o campo Multa que sempre saía zero, independente do ValorMulta. Como não queria criar um fork e ainda te passar o problema do Replace, te chamei.
Abraços
Jun 5, 2012 at 7:49 PM

Oi Jsoda

Acho que agora ficou mais lógico:

Se o valor do PercMulta é maior que zero, então tem multa, coloca o char '2' avisando que tem multa + format(percMulta, "0000"). Mas se PercMulta = 0, então coloca String("0", 5)

Não sei você, mas meu VB antigo me parece tãaaao mais direto! ^^  (vícios de programador que curte produzir mais, com mais qualidade e menos esforço, sei lá).

Vou esperar você lançar para não criar forks, ae te aviso.

Abraços

Developer
Jun 5, 2012 at 9:16 PM

Olá midnait.

Eu também penso da mesma forma que vc, mas prefiro não mexer em alguns códigos que foram colocados por outras mãos.  Tento sempre deixar o código mais "limpo" possível. Um dia, quem sabe, possamos fazer uma "limpeza geral" no código...rs...e também, para deixar claro como estava, sem colocar muitos "comments".

Sobre 

_detalhe += Mod11Bradesco(boleto.Carteira + boleto.NossoNumero.Replace("/", "").Replace("-", ""), 7);

Qual a versão que vc está utilizando?  Eu não tenho essa referência no código.
Vou subir os acertos.
Abraços,
Jun 5, 2012 at 9:33 PM

Olá Jsoda

Eu estou usando o boleto_90507.zip e tentando reaproveitá-lo para gerar a remessa. Assim que você subir essa versão final com PercMulta eu testo aqui e te dou o retorno.

Valeu pelo seu tempo e esforço. Precisando de apoio em algo, me avise.

Abraços.

Developer
Jun 5, 2012 at 10:03 PM

Estranho, essa versão não tem o código que vc se refere?

Podemos continuar em "Private", só para não alongar o POST.

De qualquer forma, subi a versão com acertos Bradesco.

Abraços,

Jun 6, 2012 at 8:37 PM

Olá Jsoda

Só para avisar:

Achei a fonte dos problemas com NossoNumero, e te mandei 3 mensagens no seu perfil. Usei sua última versão para testes.

Qualquer coisa, me grite.

Abraços

Developer
Jun 6, 2012 at 9:28 PM

Olá midnait.

Verifiquei o seu código e constatei os problemas, mas acho que não devo mexer no código, pois eles estão funcionando desde a versão 85966.

Talvez um ajuste na sua lógica, se me permite.

Aguardo contato pelo e-mail (private).

Abraços,