Example #1
0
        private void GerarRemessaCNAB400(blCobranca aCobranca, StringBuilder Remessa)
        {
            if (aCobranca.Titulos.Count.Equals(0))
            {
                throw new Exception("Não há titulos para gerar remessa.");
            }
            StringBuilder registros     = new StringBuilder();
            int           tot_registros = 0;

            #region Registro Header
            //Tipo registro 001-001
            registros.Append("0");
            //Tipo operacao 002-002
            registros.Append("1");//Remessa
            //Literal remessa 003-009
            registros.Append("REMESSA".FormatStringDireita(7, ' '));
            //Codigo servico 010-011
            registros.Append("01");
            //Literal servico 012-026
            registros.Append("COBRANCA".FormatStringDireita(15, ' '));
            //Agencia 027-031
            registros.Append(aCobranca.Titulos[tot_registros].Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0'));
            //Conta 032-040
            registros.Append(aCobranca.Titulos[tot_registros].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(9, '0'));
            //Brancos 041-046
            registros.Append(string.Empty.FormatStringDireita(6, ' '));
            //Nome empresa 047-076
            registros.Append(aCobranca.Titulos[tot_registros].Nm_cedente.Trim().RemoverCaracteres().FormatStringDireita(30, ' '));
            //Codigo banco 077-079
            registros.Append(CodigoBanco);
            //Nome banco 080-094
            registros.Append(NomeBanco.Trim().FormatStringDireita(15, ' '));
            //Data arquivo 095-100
            registros.Append(aCobranca.DataArquivo.ToString("ddMMyy"));
            //Brancos 101-391
            registros.Append("".FormatStringDireita(291, ' '));
            //Numero do arquivo 392-394
            registros.Append(aCobranca.SequencialArq.FormatStringEsquerda(3, '0'));
            //Numero registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion

            aCobranca.Titulos.ForEach(p =>
            {
                #region Registro Detalhe
                registros = new StringBuilder();
                if (aCobranca.Cd_instrucao.Equals(2) ||
                    aCobranca.Cd_instrucao.Equals(6))//Pedido de baixa ou alterar vencimento
                {
                    //Tipo registro 001-001
                    registros.Append("1");
                    //Tipo inscricao 002-003
                    registros.Append("".FormatStringDireita(2, '0'));
                    //Numero inscricao 004-017
                    registros.Append("".FormatStringEsquerda(14, '0'));
                    //Agencia conta 018-021
                    registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.Trim());
                    //Zeros 022-023
                    registros.Append("00");
                    //Conta 024-028
                    registros.Append(p.Cedente.ContaBancaria.NumeroConta.Trim());
                    //DAC Agencia/Conta 029-029
                    registros.Append(Estruturas.Mod10(p.Cedente.ContaBancaria.CodigoAgencia.Trim() + p.Cedente.ContaBancaria.NumeroConta.Trim()));
                    //Brancos 030-033
                    registros.Append("".FormatStringDireita(4, ' '));
                    //Codigo Instrucao/Alegacao 034-037
                    registros.Append("0000");
                    //Identificao titulo empresa 038-062
                    registros.Append("".FormatStringDireita(25, ' '));
                    //Nosso numero 063-070
                    registros.Append(p.Nosso_numero.FormatStringEsquerda(8, '0'));
                    //Qtde moeda 071-083
                    registros.Append("".FormatStringDireita(13, '0'));
                    //Carteira 084-086
                    registros.Append(p.Carteira.Trim());
                    //Brancos 087-107
                    registros.Append("".FormatStringDireita(21, ' '));
                    //Codigo carteira 108-108
                    registros.Append("I");
                    //Codigo instrucao 109-110
                    registros.Append(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0'));
                    //Nº documento cobranca 111-120
                    registros.Append("".FormatStringDireita(10, ' '));
                    //Vencimento 121-126
                    registros.Append(aCobranca.Cd_instrucao.Equals(6) ? p.Dt_vencimento.Value.ToString("ddMMyy") : "".FormatStringEsquerda(6, '0'));
                    //Valor documento 127-139
                    registros.Append(p.Vl_documento.SoNumero().FormatStringEsquerda(13, '0'));
                    //Codigo banco 140-142
                    registros.Append("000");
                    //Agencia cobradora 143-147
                    registros.Append("00000");
                    //Especie titulo 148-149
                    registros.Append("  ");
                    //Aceite 150-150
                    registros.Append(" ");
                    //Data emissao 151-156
                    registros.Append("".FormatStringEsquerda(6, '0'));
                    //Instrucao cobranca 1 157-158
                    registros.Append("00");
                    //Instrucao cobranca 2 159-160
                    registros.Append("00");
                    //Juro 161-173
                    registros.Append((p.Tp_jurodia.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_jurodia), 100) : p.Pc_jurodia).FormatStringEsquerda(13, '0'));
                    //Data Limite concessao desconto 174-179
                    registros.Append(p.Nr_diasdesconto > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasdesconto) * -1).ToString("ddMMyy") : p.Dt_vencimento.Value.ToString("ddMMyy"));
                    //Valor desconto 180-192
                    registros.Append((p.Tp_desconto.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_desconto), 100) : p.Pc_desconto).ToString().SoNumero().FormatStringEsquerda(13, '0'));
                    //Valor IOF 193-205
                    registros.Append("".FormatStringEsquerda(13, '0'));
                    //Valor abatimento 206-218
                    registros.Append("".FormatStringEsquerda(13, '0'));
                    //Tipo inscricao sacado 219-220
                    registros.Append("00");
                    //Inscricao sacado 221-234
                    registros.Append("".FormatStringEsquerda(14, '0'));
                    //Nome sacado 235-264
                    registros.Append("".FormatStringDireita(30, ' '));
                    //Brancos 265-274
                    registros.Append("".FormatStringDireita(10, ' '));
                    //Endereco 275-314
                    registros.Append("".FormatStringDireita(40, ' '));
                    //Bairro 315-326
                    registros.Append("".FormatStringDireita(12, ' '));
                    //CEP 327-334
                    registros.Append("".FormatStringEsquerda(8, '0'));
                    //Cidade 335-349
                    registros.Append("".FormatStringDireita(15, ' '));
                    //Estado 350-351
                    registros.Append("  ");
                    //Sacador avalista 352-381
                    registros.Append("".FormatStringDireita(30, ' '));
                    //Brancos 382-385
                    registros.Append("".FormatStringDireita(4, ' '));
                    //Data mora 386-391
                    registros.Append("000000");
                    //Prazo dias 392-393
                    registros.Append("00");
                    //Brancos 394-394
                    registros.Append(" ");
                    //Numero registro 395-400
                    registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));
                }
                else
                {
                    //Tipo registro 001-001
                    registros.Append("1");
                    //Tipo inscricao 002-003
                    registros.Append(p.Cedente.TipoInscricao.Equals(TTipoInscricao.tiPessoaJuridica) ? "02" : "01");
                    //Numero inscricao 004-017
                    registros.Append(p.Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                    //Agencia/conta 018-031
                    registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0') +
                                     p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(9, '0'));

                    //Brancos 032-062
                    registros.Append("".FormatStringDireita(31, ' '));
                    //Nosso numero 063-071
                    registros.Append(p.Nosso_numero.FormatStringEsquerda(8, '0') + p.Digito_nossonumero);
                    //Brancos 072-101
                    registros.Append("".FormatStringDireita(30, ' '));
                    //Codigo IOF 102-102
                    registros.Append("0");  //Isento
                    //Identificação Moeda 103-104
                    registros.Append("00"); //Real
                    //Branco 105-105
                    registros.Append(" ");
                    //Zeros 106-107
                    registros.Append("00");
                    //Tipo cobrança 108-108
                    registros.Append(p.Carteira); //1-Cobrança Simples 2-Cobrança Vinculada
                    //Identificação Ocorrencia 109-110
                    registros.Append("01");       //Remessa Titulo
                    //Identificação Titulo Empresa 111-120
                    registros.Append((p.Nr_lancto.ToString() + p.Id_cobranca.ToString()).FormatStringDireita(10, ' '));
                    //Vencimento 121-126
                    registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy"));
                    //Valor documento 127-139
                    registros.Append(p.Vl_documento.SoNumero().FormatStringEsquerda(13, '0'));
                    //Codigo banco 140-142
                    registros.Append(CodigoBanco);
                    //Agencia cobradora 143-147
                    registros.Append("00000");
                    //Especie titulo 148-149
                    registros.Append(ConverterEspecieDoc(p.Especie_documento));
                    //Aceite 150-150
                    registros.Append(p.Aceite_SN.Trim().ToUpper().Equals("S") ? "A" : "N");
                    //Data emissao 151-156
                    registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy"));
                    //Instrucao cobranca 1 157-158
                    registros.Append("00");
                    //Instrucao cobranca 2 159-160
                    registros.Append("00");
                    //Juro 161-173
                    registros.Append(p.Vl_morajuros.SoNumero().FormatStringEsquerda(13, '0'));
                    //Data desconto 174-179
                    registros.Append(p.Nr_diasdesconto > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasdesconto) * -1).ToString("ddMMyy") : "000000");
                    //Valor desconto 180-192
                    registros.Append(p.Vl_desconto.SoNumero().FormatStringEsquerda(13, '0'));
                    //Valor IOF 193-205
                    registros.Append("".FormatStringEsquerda(13, '0'));
                    //Valor abatimento 206-218
                    registros.Append(p.Vl_abatimento.SoNumero().FormatStringEsquerda(13, '0'));
                    //Tipo inscricao sacado 219-220
                    registros.Append(p.Sacado.TipoInscricao.Equals(TTipoInscricao.tiPessoaJuridica) ? "02" : "01");
                    //Inscricao sacado 221-234
                    registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                    //Nome sacado 235-264
                    registros.Append(p.Sacado.Nome.Trim().RemoverCaracteres().FormatStringDireita(30, ' '));
                    //Brancos 265-274
                    registros.Append("".FormatStringDireita(10, ' '));
                    //Endereco 275-314
                    registros.Append((p.Sacado.Endereco.Rua.Trim() + "," + p.Sacado.Endereco.Numero.Trim()).RemoverCaracteres().FormatStringDireita(40, ' '));
                    //Bairro 315-324
                    registros.Append(p.Sacado.Endereco.Bairro.Trim().RemoverCaracteres().FormatStringDireita(10, ' '));
                    //Brancos 325-326
                    registros.Append("  ");
                    //CEP 327-334
                    registros.Append(p.Sacado.Endereco.CEP.SoNumero().FormatStringEsquerda(8, '0'));
                    //Cidade 335-349
                    registros.Append(p.Sacado.Endereco.Cidade.Trim().RemoverCaracteres().FormatStringDireita(15, ' '));
                    //Estado 350-351
                    registros.Append(p.Sacado.Endereco.Estado.Trim());
                    //Sacador avalista 352-381
                    registros.Append(p.Avalista.Nome.Trim().RemoverCaracteres().FormatStringDireita(30, ' '));
                    //Brancos 382-388
                    registros.Append("".FormatStringDireita(7, ' '));
                    //Banco 389-391
                    registros.Append(CodigoBanco);
                    //Sequencial do arquivo 392-394
                    registros.Append(aCobranca.SequencialArq.FormatStringEsquerda(3, '0'));
                    //Numero registro 395-400
                    registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));
                }

                Remessa.AppendLine(registros.ToString());

                #endregion
            });

            #region Trailer
            registros = new StringBuilder();
            //Tipo registro 001-001
            registros.Append("9");
            //Brancos 002-368
            registros.Append("".FormatStringDireita(367, ' '));
            //Quantidade Boletos 369-376
            registros.Append(aCobranca.Titulos.Count().FormatStringEsquerda(8, '0'));
            //Valor Boletos 377-391
            registros.Append(aCobranca.Titulos.Sum(x => x.Vl_documento).SoNumero().FormatStringEsquerda(15, '0'));
            //Sequencial do arquivo 392-394
            registros.Append(aCobranca.SequencialArq.FormatStringEsquerda(3, '0'));
            //Numero registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion
        }
Example #2
0
 public string CalcularDigitoNossoNumero(blTitulo ATitulo) //{Calcula o dígito do NossoNumero, conforme critérios definidos por cada banco}
 {
     return(Estruturas.Mod10(ATitulo.Nosso_numero.Trim()).ToString().Trim());
 }