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 }
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()); }