public void GerarRemessa(blCobranca ACobranca, string Path_remessa) //{Gerar arquivo remessa para enviar ao banco} { StringBuilder Remessa = new StringBuilder(); switch (ACobranca.LayoutArquivo) { case TLayoutArquivo.laCNAB240: throw new Exception("Layout CNAB240 não suportado pelo Aliance.NET."); case TLayoutArquivo.laCNAB400: { GerarRemessaCNAB400(ACobranca, Remessa); break; } } //Salvar arquivo de remessa na pasta configurada if (!System.IO.Directory.Exists(Path_remessa)) { throw new Exception("Path salvar arquivo remessa invalido."); } if (Path_remessa.Substring(Path_remessa.Length - 1, 1) != System.IO.Path.DirectorySeparatorChar.ToString()) { Path_remessa += System.IO.Path.DirectorySeparatorChar.ToString(); } using (System.IO.StreamWriter sw = new System.IO.StreamWriter(Path_remessa + "C" + DateTime.Now.ToString("ddMMyy") + ".TXT")) { sw.Write(Remessa.ToString()); sw.Flush(); sw.Close(); } }
public bool LerRetorno(blCobranca ACobranca, string[] arq) //{Lê o arquivo retorno recebido do banco} { try { if (arq.Length <= 0) { throw new Exception("O retorno está vazio. Não há dados para processar"); } switch (ACobranca.LayoutArquivo) { case TLayoutArquivo.laCNAB240: return(LerRetornoCNAB240(ACobranca, arq)); case TLayoutArquivo.laCNAB400: throw new Exception("Esse layout não é implementado"); default: throw new Exception("Tamanho de registro inválido: " + arq[0].Length); } } catch (Exception ex) { return(false); throw new Exception(ex.Message); } }
public bool LerRetorno(blCobranca ACobranca, string[] arq) { try { if (arq.Length <= 0) { throw new Exception("O retorno está vazio. Não há dados para processar"); } switch (ACobranca.LayoutArquivo) { case TLayoutArquivo.laCNAB240: throw new Exception("Layout CNAB240 não suportado pelo Aliance.NET."); case TLayoutArquivo.laCNAB400: return(LerRetornoCNAB400(ACobranca, arq)); default: throw new Exception("Tamanho de registro inválido: " + arq[0].Length); } } catch (Exception ex) { return(false); throw new Exception(ex.Message); } }
public void GerarRemessa(blCobranca cobranca, string Path_remessa) { StringBuilder remessa = new StringBuilder(); switch (cobranca.LayoutArquivo) { case TLayoutArquivo.laCNAB240: { GerarRemessaCNAB240(cobranca, remessa); break; } case TLayoutArquivo.laCNAB400: { GerarRemessaCNAB400(cobranca, remessa); break; } } //Salvar arquivo de remessa na pasta configurada if (!Directory.Exists(Path_remessa)) { throw new Exception("Path salvar arquivo remessa invalido."); } if (Path_remessa.Substring(Path_remessa.Length - 1, 1) != Path.DirectorySeparatorChar.ToString()) { Path_remessa += Path.DirectorySeparatorChar.ToString(); } using (StreamWriter sw = new StreamWriter(Path_remessa + ("CBR" + cobranca.DataArquivo.ToString("yyyyMMdd").Substring(0, 4) + cobranca.DataArquivo.ToString("yyyyMMdd").Substring(4, 2) + cobranca.DataArquivo.ToString("yyyyMMdd").Substring(6, 2) + cobranca.SequencialArq.ToString().FormatStringEsquerda(2, '0') + ".REM"), false, Encoding.GetEncoding("iso-8859-1"))) { sw.Write(remessa.ToString()); sw.Flush(); sw.Close(); } }
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 //Identificacao do Header 001-001 registros.Append("0"); //Identificacao do arquivo remessa 002-002 registros.Append("1"); //Literal REMESSA 003-009 registros.Append("REMESSA".FormatStringDireita(7, ' ')); //Codigo servico cobranca 010-011 registros.Append("01"); //Literal COBRANCA 012-026 registros.Append("COBRANCA".FormatStringDireita(15, ' ')); //Codigo cedente 027-046 registros.Append(aCobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(20, '0')); //Nome Empresa 047-076 registros.Append(aCobranca.Titulos[0].Cedente.Nome.FormatStringDireita(30, ' ')); //Numero Banco Camara Compensacao 077-079 registros.Append(CodigoBanco.Trim()); //Nome Banco Extenso 080-094 registros.Append(NomeBanco.FormatStringDireita(15, ' ')); //Data Arquivo 095-100 registros.Append(aCobranca.DataArquivo.ToString("ddMMyy")); //Brancos 101-108 registros.Append("".FormatStringDireita(8, ' ')); //Identificacao sistema 109-110 registros.Append("MX"); //Sequencial do arquivo 111-117 registros.Append(aCobranca.SequencialArq.FormatStringEsquerda(7, '0')); //Brancos 118-394 registros.Append("".FormatStringDireita(277, ' ')); //Sequencial do registro registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion #region Registro Detalhe aCobranca.Titulos.ForEach(p => { #region Detalhe do titulo registros = new StringBuilder(); //Identificao registro 001-001 registros.Append("1"); //Agencia do Debito 002-006 registros.Append("00000"); //Digito Agencia Debito 007-007 registros.Append(" "); //Razao Conta Corrente Sacado 008-012 registros.Append("00000"); //Numero Conta Corrente Sacado 013-019 registros.Append("0000000"); //Digito Conta Sacado 020-020 registros.Append(" "); //Identificao Cedente 021-037 registros.Append("0" + p.Carteira.FormatStringEsquerda(3, '0') + p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0') + p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(7, '0') + p.Cedente.ContaBancaria.DigitoConta.Trim()); //Controle Participante 038-062 registros.Append((p.Nr_lancto.ToString() + p.Id_cobranca.ToString()).FormatStringEsquerda(25, '0')); //Codigo Banco 063-065 registros.Append("000"); if ((p.Pc_multa > decimal.Zero) && p.Tp_multa.Trim().ToUpper().Equals("P")) { //Multa 066-066 registros.Append("2"); //Percentual Multa 067-070 registros.Append(p.Pc_multa.ToString().SoNumero().FormatStringEsquerda(4, '0')); } else { //Zeros 066-070 registros.Append("00000"); } //Nosso Numero 071-081 registros.Append(p.Nosso_numero.FormatStringEsquerda(11, '0')); //Digito Nosso Numero 082-082 registros.Append(this.CalcularDigitoNossoNumero(p)); //Valor Desconto/Abatimento dia 083-092 registros.Append(string.Empty.FormatStringEsquerda(10, '0')); //Condicao Emissao 093-093 registros.Append("2");//Cliente emite e o banco somente processa //Ident. se emite boleto para debito automatico 094-094 registros.Append(" "); //Identificao operacao banco 095-104 registros.Append("".FormatStringDireita(10, ' ')); //Indicador rateio credito 105-105 registros.Append(" "); //Endereco para aviso debito automatico 106-106 registros.Append("2"); //Brancos 107-108 registros.Append(" "); //Identificacao Ocorrencia 109-110 registros.Append(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0')); //Numero documento 111-120 registros.Append((p.Nr_lancto.ToString() + p.Id_cobranca.ToString()).FormatStringEsquerda(10, '0')); //Data Vencimento 121-126 registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy")); //Valor Titulo 127-139 registros.Append(p.Vl_documento.ToString().SoNumero().FormatStringEsquerda(13, '0')); //Banco encarregado cobranca 140-142 registros.Append("000"); //Agencia Depositaria 143-147 registros.Append("00000"); //Especie Titulo 148-149 registros.Append(this.ConverterEspecieDoc(p.Especie_documento)); //Identificacao 150-150 registros.Append(p.Aceite_SN); //Data Emissao Titulo 151-156 registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy")); //Instrucao 1 157-158 registros.Append(p.St_protestarauto ? "06" : "00"); //Instrucao 2 159-160 registros.Append(p.Nr_diasprotestar > decimal.Zero ? p.Nr_diasprotestar.FormatStringEsquerda(2, '0') : "00"); //Valor cobrado dias atrazo 161-173 registros.Append((p.Tp_jurodia.Trim().Equals("P") ? Math.Round(decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_jurodia), 100), 2, MidpointRounding.AwayFromZero) : p.Pc_jurodia).ToString().SoNumero().FormatStringEsquerda(13, '0')); //Data limite 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.Tp_desconto.Trim().Equals("P") ? Math.Round(decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_desconto), 100), 2, MidpointRounding.AwayFromZero) : p.Pc_desconto).ToString().SoNumero().FormatStringEsquerda(13, '0')); //Valor IOF 193-205 registros.Append(decimal.Zero.ToString().FormatStringEsquerda(13, '0')); //Valor Abatimento 206-218 registros.Append(string.Empty.FormatStringEsquerda(13, '0')); //Tipo Inscricao Sacado 219-220 registros.Append(p.Sacado.TipoInscricao.Equals(TTipoInscricao.tiPessoaFisica) ? "01" : "02"); //Numero Inscricao Sacado 221-234 registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); //Nome Sacado 235-274 registros.Append(p.Sacado.Nome.RemoverCaracteres().FormatStringDireita(40, ' ')); //Endereco Sacado 275-314 registros.Append((p.Sacado.Endereco.Rua.RemoverCaracteres().Trim() + p.Sacado.Endereco.Numero.RemoverCaracteres().Trim()).FormatStringDireita(40, ' ')); //Mensagem 1 315-326 registros.Append(string.Empty.FormatStringDireita(12, ' ')); //CEP 327-331 registros.Append(p.Sacado.Endereco.CEP.SoNumero().Length.Equals(8) ? p.Sacado.Endereco.CEP.SoNumero().Substring(0, 5) : " "); //Sufixo CEP 332-334 registros.Append(p.Sacado.Endereco.CEP.SoNumero().Length.Equals(8) ? p.Sacado.Endereco.CEP.SoNumero().Substring(5, 3) : " "); //Mensagem 2 Sacador Avalista 335-394 registros.Append(string.Empty.FormatStringDireita(60, ' ')); //sequencial do registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion }); #endregion #region Trailer registros = new StringBuilder(); //Identificacao registro 001-001 registros.Append("9"); //Identificacao remessa 002-394 registros.Append(string.Empty.FormatStringDireita(393, ' ')); //Sequencial registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion }
public void GerarRemessa(blCobranca ACobranca, string Path_remessa) //{Gerar arquivo remessa para enviar ao banco} { StringBuilder Remessa = new StringBuilder(); switch (ACobranca.LayoutArquivo) { case TLayoutArquivo.laCNAB240: throw new Exception("Layout CNAB240 não suportado pelo Aliance.NET."); case TLayoutArquivo.laCNAB400: { GerarRemessaCNAB400(ACobranca, Remessa); break; } } //Salvar arquivo de remessa na pasta configurada if (!System.IO.Directory.Exists(Path_remessa)) { throw new Exception("Path salvar arquivo remessa invalido."); } if (Path_remessa.Substring(Path_remessa.Length - 1, 1) != System.IO.Path.DirectorySeparatorChar.ToString()) { Path_remessa += System.IO.Path.DirectorySeparatorChar.ToString(); } object obj = new TCD_LoteRemessa().BuscarEscalar( new TpBusca[] { new TpBusca() { vNM_Campo = "a.cd_empresa", vOperador = "=", vVL_Busca = "'" + ACobranca.Titulos[0].Cd_empresa.Trim() + "'" }, new TpBusca() { vNM_Campo = "a.cd_contager", vOperador = "=", vVL_Busca = "'" + ACobranca.Titulos[0].Cd_contager.Trim() + "'" }, new TpBusca() { vNM_Campo = "convert(datetime, floor(convert(decimal(30,10), a.dt_lote)))", vOperador = "=", vVL_Busca = "'" + ACobranca.DataArquivo.ToString("yyyyMMdd") + "'" }, new TpBusca() { vNM_Campo = "isnull(a.st_registro, 'A')", vOperador = "=", vVL_Busca = "'P'" } }, "count(*)"); using (System.IO.StreamWriter sw = new System.IO.StreamWriter(Path_remessa + "CB" + //Cobranca Bradesco ACobranca.DataArquivo.Day.FormatStringEsquerda(2, '0') + ACobranca.DataArquivo.Month.FormatStringEsquerda(2, '0') + (obj == null ? "01" : decimal.Parse(obj.ToString() + 1).FormatStringEsquerda(2, '0')) + ".REM")) { sw.Write(Remessa.ToString()); sw.Flush(); sw.Close(); } }
public bool LerRetorno(blCobranca ACobranca, StringBuilder Retorno) //{Lê o arquivo retorno recebido do banco} { return(false); }
public bool GerarRemessa(blCobranca ACobranca, StringBuilder Remessa) //{Gerar arquivo remessa para enviar ao banco} { return(false); }
private bool GerarRemessaCNAB400(blCobranca ACobranca, StringBuilder Remessa) { return(false); }
private bool LerRetornoCNAB400(blCobranca ACobranca, StringBuilder Retorno) { return(false); }
private bool LerRetornoCNAB240(blCobranca ACobranca, string[] Retorno) { string ACodigoBanco; string ACodigoCedente; int NumeroRegistro = 0; blTitulo ATitulo = null; try { #region HEADER //Codigo do banco ACodigoBanco = Retorno[NumeroRegistro].Substring(0, 3); if (ACodigoBanco != CodigoBanco) { throw new Exception("Este não é um retorno de cobrança do banco " + CodigoBanco + " " + NomeBanco); } //Codigo cedente ACodigoCedente = Retorno[NumeroRegistro].Substring(32, 20); //Data do arquivo if (Retorno[NumeroRegistro].Substring(143, 8) != "00000000") { ACobranca.DataArquivo = DateTime.Parse(Retorno[NumeroRegistro].Substring(143, 2) + "/" + Retorno[NumeroRegistro].Substring(145, 2) + "/" + Retorno[NumeroRegistro].Substring(147, 4)); } else { ACobranca.DataArquivo = DateTime.Now; } //Numero arquivo ACobranca.SequencialArq = decimal.Parse(Retorno[NumeroRegistro].Substring(157, 6)); #endregion for (NumeroRegistro = 1; NumeroRegistro <= (Retorno.Length - 2); NumeroRegistro++) { //Tipo registro é 3 if (Retorno[NumeroRegistro].Substring(7, 1) == "3") { ATitulo = new blTitulo(); ATitulo.Cedente.ContaBancaria.Banco.Codigo = ACodigoBanco; //Codigo do cedente ATitulo.Cedente.CodigoCedente = ACodigoCedente; //Ocorrencia ATitulo.Cd_ocorrencia = Retorno[NumeroRegistro].Substring(15, 2); //Descricao ocorrencia ATitulo.Ds_ocorrencia = TratarOcorrencia(ATitulo.Cd_ocorrencia); //Nosso numero ATitulo.Nosso_numero = Retorno[NumeroRegistro].Substring(37, 20); //Data de vencimento if (Retorno[NumeroRegistro].Substring(73, 8) != "00000000") { ATitulo.Dt_vencimento = DateTime.Parse(Retorno[NumeroRegistro].Substring(73, 2) + "/" + Retorno[NumeroRegistro].Substring(75, 2) + "/" + Retorno[NumeroRegistro].Substring(77, 4)); } else { ATitulo.Dt_vencimento = DateTime.Now; } //Valor do titulo if (Retorno[NumeroRegistro].Substring(81, 13) != "0000000000000") { ATitulo.Vl_documento = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(81, 13)) / 100; } else { ATitulo.Vl_documento = decimal.Zero; } //Valor das despesas if (Retorno[NumeroRegistro].Substring(198, 13) != "0000000000000") { ATitulo.Vl_despesa_cobranca = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(198, 13)) / 100; } else { ATitulo.Vl_despesa_cobranca = decimal.Zero; } //Motivo ocorrencia ATitulo.Ds_motivoocorrencia = TratarMotivoOcorrencia(Retorno[NumeroRegistro].Substring(213, 10)); if (Retorno[NumeroRegistro + 1].Substring(7, 1).Equals("3") && Retorno[NumeroRegistro + 1].Substring(13, 1).Equals("U")) { NumeroRegistro++; //Juros if (Retorno[NumeroRegistro].Substring(17, 13) != "0000000000000") { ATitulo.Vl_morajuros = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(17, 13)) / 100; } else { ATitulo.Vl_morajuros = decimal.Zero; } //Desconto if (Retorno[NumeroRegistro].Substring(32, 13) != "0000000000000") { ATitulo.Vl_desconto = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(32, 13)) / 100; } else { ATitulo.Vl_desconto = decimal.Zero; } //Abatimento if (Retorno[NumeroRegistro].Substring(47, 13) != "0000000000000") { ATitulo.Vl_abatimento = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(47, 13)) / 100; } else { ATitulo.Vl_abatimento = decimal.Zero; } //Outras despesas if (Retorno[NumeroRegistro].Substring(107, 13) != "0000000000000") { ATitulo.Vl_outras_despesas = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(107, 13)) / 100; } else { ATitulo.Vl_outras_despesas = decimal.Zero; } //Outros creditos if (Retorno[NumeroRegistro].Substring(122, 13) != "0000000000000") { ATitulo.vl_outros_creditos = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(122, 13)) / 100; } else { ATitulo.vl_outros_creditos = decimal.Zero; } //Data ocorrencia if (Retorno[NumeroRegistro].Substring(137, 8) != "00000000") { ATitulo.Dt_ocorrencia = DateTime.Parse(Retorno[NumeroRegistro].Substring(137, 2) + "/" + Retorno[NumeroRegistro].Substring(139, 2) + "/" + Retorno[NumeroRegistro].Substring(141, 4)); } else { ATitulo.Dt_ocorrencia = DateTime.Now; } //Data credito if (Retorno[NumeroRegistro].Substring(145, 8) != "00000000") { ATitulo.Dt_credito = DateTime.Parse(Retorno[NumeroRegistro].Substring(145, 2) + "/" + Retorno[NumeroRegistro].Substring(147, 2) + "/" + Retorno[NumeroRegistro].Substring(149, 4)); } else { ATitulo.Dt_credito = DateTime.Now; } } ACobranca.Titulos.Add(ATitulo); } } return(true); } catch (Exception ex) { throw new Exception(ex.Message); } }
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 //Identificacao do Header 001-001 registros.Append("0"); //Tipo do arquivo 002-002 registros.Append("1"); //Identificação por extenso do tipo de operação 003-009 registros.Append("REMESSA".FormatStringDireita(7, ' ')); //Identificação tipo serviço 010-011 registros.Append("01"); //Literal COBRANCA 012-026 registros.Append("COBRANCA".FormatStringDireita(15, ' ')); //Complemento Registro 027-027 registros.Append("0"); //Numero Agencia 028-031 registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(4, '0')); //Sub-conta do cliente 032-033 registros.Append("55"); //Numero Conta 034-044 registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(11, '0')); //Uso Banco 045-046 registros.Append(" "); //Nome Cedente 047-076 registros.Append(aCobranca.Titulos[0].Cedente.Nome.FormatStringDireita(30, ' ')); //Numero Banco 077-079 registros.Append(CodigoBanco); //Nome Banco 080-094 registros.Append(NomeBanco.ToUpper().FormatStringDireita(15, ' ')); //Data arquivo 095-100 registros.Append(aCobranca.DataArquivo.ToString("ddMMyy")); //Densidade Gravacao 101-105 registros.Append("01600"); //Unidade Densidade 106-108 registros.Append("BPI"); //Uso do banco 109-110 registros.Append(" "); //Sigla Layout Tecnico 111-117 registros.Append("LANCV08"); //Uso Banco 118-394 registros.Append("".FormatStringDireita(277, ' ')); //Sequencial do registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion #region Registro Detalhe aCobranca.Titulos.ForEach(p => { #region Detalhe do titulo registros = new StringBuilder(); //Identificao Registro 001-001 registros.Append("1"); //Tipo inscricao cedente 002-003 registros.Append(p.Cedente.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "01" : "02"); //Numero CPF/CNPJ 004-017 registros.Append(p.Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); //Zero 018-018 registros.Append("0"); //Codigo Agencia 019-022 registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(4, '0')); //Sub-conta 023-024 registros.Append("55"); //Numero Conta 025-035 registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(4, '0') + p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(5, '0') + p.Cedente.ContaBancaria.DigitoConta.FormatStringEsquerda(2, '0')); //Brancos 036-037 registros.Append(" "); //Controle Empresa 038-062 registros.Append((p.Nr_lancto.ToString() + "/" + p.Cd_parcela.ToString()).FormatStringDireita(25, ' ')); //Nosso Numero 063-073 registros.Append(p.Nosso_numero.FormatStringEsquerda(11, '0')); //Data Desconto 074-079 registros.Append("000000"); //Valor desconto 080-090 registros.Append("".FormatStringEsquerda(11, '0')); //Data Desconto 091-096 registros.Append("000000"); //Valor desconto 097-107 registros.Append("".FormatStringEsquerda(11, '0')); //Carteira 108-108 registros.Append(p.Carteira.Trim()); //Codigo Ocorrencia 109-110 registros.Append(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0')); //Seu numero 111-120 registros.Append((p.Nr_lancto.Value.ToString() + p.Cd_parcela.Value.ToString()).FormatStringEsquerda(10, '0')); //Data vencimento 121-126 registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy")); //Valor titulo 127-139 registros.Append(p.Vl_documento.SoNumero().FormatStringEsquerda(13, '0')); //Numero do banco 140-142 registros.Append(p.Cd_banco.Trim()); //Agencia depositaria 143-147 registros.Append("00000"); //Especie do titulo 148-149 registros.Append(this.ConverterEspecieDoc(p.Especie_documento)); //Aceite 150-150 registros.Append(p.Aceite_documento == TAceiteDocumento.adSim ? "A" : "N"); //Data emissao 151-156 registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy")); //Instrucao 157-158 registros.Append("00"); //Instrucao 159-160 registros.Append("00"); //Juros de mora 161-173 if (p.Pc_jurodia > decimal.Zero) { registros.Append(" T" + p.Pc_jurodia.ToString("N2", new System.Globalization.CultureInfo("pt-BR")).SoNumero().FormatStringEsquerda(4, '0')); } else { registros.Append("".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 pagador 219-220 registros.Append(p.Sacado.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "01" : "02"); //CPF/CNPJ Sacado 221-234 registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); //Nome sacado 235-274 registros.Append(p.Sacado.Nome.FormatStringDireita(40, ' ')); //Endereco sacado 275-312 registros.Append((p.Sacado.Endereco.Rua.Trim() + ", " + p.Sacado.Endereco.Numero).FormatStringDireita(38, ' ')); //Instrucao de nao recebimento de boleto 313-314 registros.Append(" "); //Bairro sacado 315-326 registros.Append(p.Sacado.Endereco.Bairro.FormatStringDireita(12, ' ')); //CEP Sacado 327-334 registros.Append(p.Sacado.Endereco.CEP.SoNumero().FormatStringEsquerda(8, '0')); //Cidade Sacado 335-349 registros.Append(p.Sacado.Endereco.Cidade.FormatStringDireita(15, ' ')); //UF Sacado 350-351 registros.Append(p.Sacado.Endereco.Estado.FormatStringDireita(2, ' ')); //Sacador Avalista 352-390 registros.Append("".FormatStringDireita(39, ' ')); //Tipo boleto 391-391 registros.Append(" "); //Dias Protesto 392-393 if (p.St_protestarauto) { registros.Append(p.Nr_diasprotestar < 5 ? "05" : p.Nr_diasprotestar.FormatStringEsquerda(2, '0')); } else { registros.Append(" "); } //Moeda 394-394 registros.Append("9");//Real //sequencial do registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion }); #endregion #region Trailer registros = new StringBuilder(); //Identificacao registro 001-001 registros.Append("9"); //Complemento 002-394 registros.Append(string.Empty.FormatStringDireita(393, ' ')); //Sequencial registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion }
public 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 Header //Identificação registro 001-001 registros.Append("0"); //Tipo Operação 002-002 registros.Append("1"); //Identificação 003-009 registros.Append("REMESSA"); //Tipo serviço 010-011 registros.Append("01"); //Serviço 012-019 registros.Append("COBRANCA"); //Brancos 020-026 registros.Append(string.Empty.FormatStringDireita(7, ' ')); //Numero Agencia 027-030 registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(4, '0')); //Digito Agencia 031-031 registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.DigitoAgencia.FormatStringDireita(1, ' ')); //Conta Corrente 032-039 registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(8, '0')); //Digito Conta 040-040 registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.DigitoConta.FormatStringDireita(1, ' ')); //Complemento 041-046 registros.Append(string.Empty.FormatStringEsquerda(6, '0')); //Nome Cedente 047-076 registros.Append(aCobranca.Titulos[0].Cedente.Nome.RemoverCaracteres().FormatStringDireita(30, ' ')); //Banco 077-094 registros.Append((CodigoBanco + NomeBanco).FormatStringDireita(18, ' ')); //Data arquivo 095-100 registros.Append(aCobranca.DataArquivo.ToString("ddMMyy")); //Sequencial arquivo 101-107 registros.Append(aCobranca.SequencialArq.FormatStringEsquerda(7, '0')); //Complementos 108-149 registros.Append(string.Empty.FormatStringDireita(42, ' ')); //Numero Convenio 150-156 registros.Append(aCobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(7, '0')); //Complementos 157-394 registros.Append(string.Empty.FormatStringDireita(238, ' ')); //Sequencia do registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion #region Detalhe aCobranca.Titulos.ForEach(p => { registros = new StringBuilder(); //Identificação Registro 001-001 registros.Append("7"); //Tipo Inscrição Cedente 002-003 registros.Append(p.Cedente.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "01" : "02"); //Numero doc cedente 004-017 registros.Append(p.Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); //Prefixo Agencia 018-021 registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(4, '0')); //Digito Agencia 022-022 registros.Append(p.Cedente.ContaBancaria.DigitoAgencia.FormatStringDireita(1, ' ')); //Conta Corrente 023-030 registros.Append(p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(8, '0')); //Digito Conta 031-031 registros.Append(p.Cedente.ContaBancaria.DigitoConta.FormatStringDireita(1, ' ')); //Codigo Cedente 032-038 registros.Append(p.Cedente.CodigoCedente.FormatStringEsquerda(7, '0')); //Codigo controle empresa 039-063 registros.Append((p.Nr_lancto.ToString() + "/" + p.Cd_parcela.ToString()).FormatStringDireita(25, ' ')); //Nosso numero 064-080 registros.Append(p.Nosso_numero.FormatStringEsquerda(17, '0')); //Zeros 081-084 registros.Append("0000"); //Brancos 085-087 registros.Append(" "); //Mensagem ou Avalista 088-088 registros.Append(string.IsNullOrEmpty(p.Avalista.NumeroCPFCNPJ) ? " " : "A"); //Brancos 089-091 registros.Append(" "); //Variação Carteira 092-094 registros.Append(" "); //Zeros 095-101 registros.Append("0000000"); //Tipo cobrança 102-106 registros.Append(" "); //Carteira 107-108 registros.Append(p.Carteira.FormatStringEsquerda(2, '0')); //Movimento Remessa 109-110 registros.Append(TratarInstrucaoRemessa(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0'))); //Seu numero 111-120 registros.Append((p.Nr_lancto.ToString() + "/" + p.Cd_parcela.ToString()).FormatStringDireita(10, ' ')); //Vencimento 121-126 registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy")); //Valor Titulo 127-139 registros.Append(p.Vl_documento.SoNumero().FormatStringEsquerda(13, '0')); //Codigo Banco 140-142 registros.Append(CodigoBanco); //Prefixo agencia cobradora 143-146 registros.Append("0000"); //Digito agencia cobradora 147-147 registros.Append(" "); //Especie titulo 148-149 registros.Append(ConverterEspecieDoc(p.Especie_documento).FormatStringEsquerda(2, '0')); //Aceite titulo 150-150 registros.Append(p.Aceite_documento == TAceiteDocumento.adSim ? "1" : "0"); //Data emissão 151-156 registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy")); //Instrução codificada 157-158 registros.Append(p.St_protestarauto ? "09" : " "); //Instrução codificada 159-160 registros.Append(" "); //Juros de mora 161-173 if (p.Pc_jurodia > decimal.Zero) { registros.Append((p.Tp_jurodia.Trim().ToUpper().Equals("P") ? decimal.Multiply(p.Vl_documento, decimal.Divide(p.Pc_jurodia, 100)) : p.Pc_jurodia).SoNumero().FormatStringEsquerda(13, '0')); } else { registros.Append(string.Empty.FormatStringEsquerda(13, '0')); } //Zeros 174-179 registros.Append("000000"); //Valor desconto 180-192 if (p.Pc_desconto > decimal.Zero) { registros.Append((p.Tp_desconto.Trim().ToUpper().Equals("P") ? decimal.Multiply(p.Vl_documento, decimal.Divide(p.Pc_desconto, 100)) : p.Pc_desconto).SoNumero().FormatStringEsquerda(13, '0')); } else { registros.Append(string.Empty.FormatStringEsquerda(13, '0')); } //Zeros 193-205 registros.Append(string.Empty.FormatStringEsquerda(13, '0')); //Valor Abatimento 206-218 registros.Append(string.Empty.FormatStringEsquerda(13, '0')); //Tipo inscrição sacado 219-220 registros.Append(p.Sacado.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "01" : "02"); //Inscrição sacado 221-234 registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); //Nome sacado 235-271 registros.Append(p.Sacado.Nome.RemoverCaracteres().FormatStringDireita(37, ' ')); //Brancos 272-274 registros.Append(" "); //Endereço Sacado 275-314 registros.Append(p.Sacado.Endereco.Rua.RemoverCaracteres().FormatStringDireita(40, ' ')); //Bairro Sacado 315-326 registros.Append(p.Sacado.Endereco.Bairro.RemoverCaracteres().FormatStringDireita(12, ' ')); //CEP Sacado 327-334 registros.Append(p.Sacado.Endereco.CEP.FormatStringDireita(8, ' ')); //Cidade Sacado 335-349 registros.Append(p.Sacado.Endereco.Cidade.RemoverCaracteres().FormatStringDireita(15, ' ')); //UF Sacado 350-351 registros.Append(p.Sacado.Endereco.Estado.FormatStringDireita(2, ' ')); //Obs/Avalista 352-391 if (!string.IsNullOrEmpty(p.Avalista.NumeroCPFCNPJ)) { if (p.Avalista.TipoInscricao == TTipoInscricao.tiPessoaJuridica) { //Nome avalista 352-372 registros.Append(p.Avalista.Nome.RemoverCaracteres().FormatStringDireita(21, ' ')); //Branco 373-373 registros.Append(" "); //CNPJ 374-377 registros.Append("CNPJ"); //Numero 378-391 registros.Append(p.Avalista.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); } else { //Nome avalista 352-376 registros.Append(p.Avalista.Nome.RemoverCaracteres().FormatStringDireita(25, ' ')); //Branco 377-377 registros.Append(" "); //CPJ 378-380 registros.Append("CPF"); //Numero 381-391 registros.Append(p.Avalista.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(11, '0')); } } else { registros.Append(string.Empty.FormatStringDireita(40, ' ')); } //Dias Protesto 392-393 registros.Append(p.St_protestarauto ? p.Nr_diasprotestar <= 5 ? "05" : p.Nr_diasprotestar >= 15 ? "15" : p.Nr_diasprotestar.FormatStringEsquerda(2, '0') : " "); //Branco 394-394 registros.Append(" "); //sequencial do registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); }); #endregion #region Trailer registros = new StringBuilder(); //Identificação Registro 001-001 registros.Append("9"); //Complemento 002-394 registros.Append(string.Empty.FormatStringDireita(393, ' ')); //Sequencial registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion }
public void GerarRemessa(blCobranca ACobranca, string Path_remessa) //{Gerar arquivo remessa para enviar ao banco} { StringBuilder Remessa = new StringBuilder(); switch (ACobranca.LayoutArquivo) { case TLayoutArquivo.laCNAB240: throw new Exception("Layout CNAB240 não suportado pelo Aliance.NET."); case TLayoutArquivo.laCNAB400: { GerarRemessaCNAB400(ACobranca, Remessa); break; } } //Salvar arquivo de remessa na pasta configurada if (!System.IO.Directory.Exists(Path_remessa)) { throw new Exception("Path salvar arquivo remessa invalido."); } if (Path_remessa.Substring(Path_remessa.Length - 1, 1) != System.IO.Path.DirectorySeparatorChar.ToString()) { Path_remessa += System.IO.Path.DirectorySeparatorChar.ToString(); } string extensao = ".CRM"; TList_LoteRemessa lLote = new TCD_LoteRemessa().Select( new TpBusca[] { new TpBusca() { vNM_Campo = "b.cd_empresa", vOperador = "=", vVL_Busca = "'" + ACobranca.Titulos[0].Cd_empresa.Trim() + "'" }, new TpBusca() { vNM_Campo = "b.cd_contager", vOperador = "=", vVL_Busca = "'" + ACobranca.Titulos[0].Cd_contager.Trim() + "'" }, new TpBusca() { vNM_Campo = "convert(datetime, floor(convert(decimal(30,10), a.dt_lote)))", vOperador = "=", vVL_Busca = "'" + ACobranca.DataArquivo.ToString("yyyyMMdd") + "'" }, new TpBusca() { vNM_Campo = "isnull(a.nr_arqremessa, 0)", vOperador = "<>", vVL_Busca = "0" } }, 0, string.Empty); if (lLote.Count > 0) { if (lLote.Exists(p => p.Nr_arqRemessa.Equals(ACobranca.SequencialArq))) { if (lLote.OrderBy(p => p.Nr_arqRemessa).ToList().FindIndex(p => p.Nr_arqRemessa.Equals(ACobranca.SequencialArq)) > 0) { extensao = ".RM" + (lLote.OrderBy(p => p.Nr_arqRemessa).ToList().FindIndex(p => p.Nr_arqRemessa.Equals(ACobranca.SequencialArq)) + 1).ToString(); } } else { extensao = ".RM" + (lLote.Count + 1).ToString(); } } using (StreamWriter sw = new StreamWriter(Path_remessa + ACobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(5, '0') + this.CodigoMes(ACobranca.DataArquivo.Month) + ACobranca.DataArquivo.Day.FormatStringEsquerda(2, '0') + extensao)) { sw.Write(Remessa.ToString()); sw.Flush(); sw.Close(); } }
private void GerarRemessaCNAB240(blCobranca cobranca, StringBuilder Remessa) { if (cobranca.Titulos.Count.Equals(0)) { throw new Exception("Não há titulos para gerar remessa."); } StringBuilder registros = new StringBuilder(); #region Registro Header Arquivo //Codigo do banco 001-003 registros.Append(CodigoBanco); //Lote Servico 004-007 registros.Append("0000"); //Tipo Registro 008-008 registros.Append("0"); //Brancos 009-017 registros.Append(string.Empty.FormatStringDireita(9, ' ')); //Tipo insc. cedente 018-018 registros.Append(cobranca.Titulos[0].Cedente.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "1" : "2"); //Inscrição cedente 019--032 registros.Append(cobranca.Titulos[0].Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); //Codigo cedente 033-052 registros.Append(cobranca.Titulos[0].Cedente.CodigoCedente.FormatStringDireita(20, ' ')); //Agencia cedente 053-057 registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0')); //Digito agencia 058-058 registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.DigitoAgencia.FormatStringEsquerda(1, '0')); //Conta corrente 059-070 registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(12, '0')); //Digito Conta 071-071 registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.DigitoConta.FormatStringEsquerda(1, '0')); //Branco 072-072 registros.Append(" "); //Nome cedente 073-102 registros.Append(cobranca.Titulos[0].Cedente.Nome.RemoverCaracteres().FormatStringDireita(30, ' ')); //Nome cooperativa 103-132 registros.Append(NomeBanco.FormatStringDireita(30, ' ')); //Brancos 133-142 registros.Append(string.Empty.FormatStringDireita(10, ' ')); //Codigo remessa 143-143 registros.Append("1"); //Data arquivo 144-151 registros.Append(cobranca.DataArquivo.ToString("ddMMyyyy")); //Hora arquivo 152-157 registros.Append(cobranca.DataArquivo.ToString("HHmmss")); //Numero Arquivo 158-163 registros.Append(cobranca.SequencialArq.FormatStringEsquerda(6, '0')); //Numero versao 164-166 registros.Append("087"); //Densidade gravação 167-171 registros.Append("01600"); //Brancos 172-240 registros.Append(string.Empty.FormatStringDireita(69, ' ')); Remessa.AppendLine(registros.ToString()); int tot_registro = 1; #endregion #region Registro Header Lote registros = new StringBuilder(); //Codigo do banco 001-003 registros.Append(CodigoBanco.Trim()); //Lote servico 004-007 registros.Append("0001"); //Tipo registro 008-008 registros.Append("1"); //Tipo operação 009-009 registros.Append("R"); //Tipo serviço 010-011 registros.Append("01"); //Brancos 012-013 registros.Append(string.Empty.FormatStringDireita(2, ' ')); //Versão do layout 014-016 registros.Append("045"); //Branco 017-017 registros.Append(" "); //Tipo Inscrição Empresa 018-018 registros.Append(cobranca.Titulos[0].Cedente.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "1" : "2"); //Inscrição Empresa 019-033 registros.Append(cobranca.Titulos[0].Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(15, '0')); //Codigo Cendente 034-053 registros.Append(cobranca.Titulos[0].Cedente.CodigoCedente.FormatStringDireita(20, ' ')); //Agencia 054-058 registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0')); //Digito Agencia 059-059 registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.DigitoAgencia.FormatStringEsquerda(1, '0')); //Conta Corrente 060-071 registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(12, '0')); //Digito Conta 072-072 registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.DigitoConta.FormatStringEsquerda(1, '0')); //Digito Ag/Conta 073-073 registros.Append(" "); //Nome Empresa 074-103 registros.Append(cobranca.Titulos[0].Cedente.Nome.RemoverCaracteres().FormatStringDireita(30, ' ')); //Mensagem 1 104-143 registros.Append(string.Empty.FormatStringDireita(40, ' ')); //Mensagem 2 144-183 registros.Append(string.Empty.FormatStringDireita(40, ' ')); //Numero Arquivo 184-191 registros.Append(cobranca.SequencialArq.ToString().FormatStringEsquerda(8, '0')); //Data arquivo 192-199 registros.Append(cobranca.DataArquivo.ToString("ddMMyyyy")); //Zeros 200-207 registros.Append("0".FormatStringEsquerda(8, '0')); //Filler 208-240 registros.Append("".FormatStringDireita(33, ' ')); Remessa.AppendLine(registros.ToString()); tot_registro += 1; #endregion #region Detalhes int lote = 1; cobranca.Titulos.ForEach(p => { #region Segmento P registros = new StringBuilder(); //Codigo Banco 001-003 registros.Append(CodigoBanco); //Numero lote 004-007 registros.Append("0001"); //Tipo registro 008-008 registros.Append("3"); //Numero sequencial lote 009-013 registros.Append("00001"); //Codigo segmento 014-014 registros.Append("P"); //Brancos 015-015 registros.Append(" "); //Cogido Instrucao 016-017 registros.Append(cobranca.Cd_instrucao.FormatStringEsquerda(2, '0')); //Agencia 018-022 registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0')); //Digito Agencia 023-023 registros.Append(p.Cedente.ContaBancaria.DigitoAgencia.FormatStringEsquerda(1, '0')); //Conta Corrente 024-035 registros.Append(p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(12, '0')); //Digito conta 036-036 registros.Append(p.Cedente.ContaBancaria.DigitoConta.FormatStringEsquerda(1, '0')); //Branco 037-037 registros.Append(" "); //Nosso numero 038-057 registros.Append(p.Nosso_numero.FormatStringDireita(20, ' ')); //Carteira 058-058 registros.Append(p.Carteira.Trim()); //Forma cadastro banco 059-059 registros.Append("1"); //Tipo documento 060-060 registros.Append("1"); //Identificação emissão 061-061 registros.Append("2"); //Identificação distribuição 062-062 registros.Append("2"); //Numero documento 063-077 registros.Append((p.Nr_lancto.ToString() + p.Cd_parcela.ToString() + p.Id_cobranca.ToString()).FormatStringDireita(15, ' ')); //Vencimento 078-085 registros.Append(p.Dt_vencimento.Value.ToString("ddMMyyyy")); //Valor titulo 086-100 registros.Append(p.Vl_documento.ToString().SoNumero().FormatStringEsquerda(15, '0')); //Agencia cobrança 101-105 registros.Append("00000"); //Digito agencia cobrança 106-106 registros.Append(" "); //Especie titulo 107-108 registros.Append(p.RetornarCodigoEspecieDocumento().FormatStringEsquerda(2, '0')); //Tipo aceite 109-109 registros.Append(p.Aceite_documento.Equals(TAceiteDocumento.adSim) ? "A" : "N"); //Data emissão 110-117 registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyyyy")); //Codigo juro 118-118 registros.Append(p.Pc_jurodia > decimal.Zero ? p.Tp_jurodia.Trim().ToUpper().Equals("P") ? "2" : "1" : "3"); //Data Juro 119-126 registros.Append("00000000"); //Juros valor/% 127-141 registros.Append((p.Pc_jurodia * (p.Tp_jurodia.Trim().ToUpper().Equals("P") ? 30 : 1)).SoNumero().FormatStringEsquerda(15, '0')); //Codigo desconto 142-142 registros.Append(p.Pc_desconto > decimal.Zero ? "1" : "0"); //Data desconto 143-150 registros.Append(p.Nr_diasdesconto > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasdesconto) * -1).ToString("ddMMyyyy") : p.Dt_vencimento.Value.ToString("ddMMyyyy")); //Valor desconto 151-165 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(15, '0')); //IOF 166-180 registros.Append(decimal.Zero.FormatStringEsquerda(15, '0')); //Valor abatimento 181-195 registros.Append(p.Vl_abatimento.SoNumero().FormatStringEsquerda(15, '0')); //Identificação titulo na empresa 196-220 registros.Append((p.Nosso_numero.Trim() + cobranca.Cd_instrucao.ToString()).FormatStringDireita(25, ' ')); //Protestar 221-221 registros.Append(p.St_protestarauto ? "1" : "3"); //Prazo protesto 222-223 registros.Append(p.St_protestarauto ? p.Nr_diasprotestar < 5 ? "05" : p.Nr_diasprotestar > 15 ? "15" : p.Nr_diasprotestar.FormatStringEsquerda(2, '0') : "00"); //Codigo baixa 224-224 registros.Append("2"); //Prazo baixa 225-227 registros.Append(" "); //Codigo moeda 228-229 registros.Append("09"); //Numero contrato 230-239 registros.Append(decimal.Zero.FormatStringEsquerda(10, '0')); //Brancos 240-240 registros.Append(" "); Remessa.AppendLine(registros.ToString()); tot_registro++; lote++; #endregion #region Segmento Q registros = new StringBuilder(); //Zeros 001-003 registros.Append(CodigoBanco); //Lote servico 004-007 registros.Append("0001"); //Registro 008-008 registros.Append("3"); //numero registro 009-013 registros.Append("00002"); //Codigo segmento 014-014 registros.Append("Q"); //Brancos 015-015 registros.Append(" "); //Codigo instrucao = igual informado segmento P 016-017 registros.Append(cobranca.Cd_instrucao.FormatStringEsquerda(2, '0')); //Tipo inscricao sacado 018-018 registros.Append(p.Sacado.TipoInscricao.Equals(TTipoInscricao.tiPessoaFisica) ? "1" : "2"); //Cnpj/Cpf 019-033 registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(15, '0')); //Nome sacado 034-073 registros.Append(p.Sacado.Nome.Trim().RemoverCaracteres().FormatStringDireita(40, ' ')); //Endereco sacado 074-113 registros.Append((p.Sacado.Endereco.Rua.Trim().RemoverCaracteres() + "," + p.Sacado.Endereco.Numero.RemoverCaracteres()).FormatStringDireita(40, ' ')); //Bairro sacado 114-128 registros.Append(p.Sacado.Endereco.Bairro.Trim().RemoverCaracteres().FormatStringDireita(15, ' ')); //CEP 129-133 registros.Append(p.Sacado.Endereco.CEP.SoNumero().Substring(0, 5)); //Sufixo CEP 134-136 registros.Append(p.Sacado.Endereco.CEP.SoNumero().Substring(5, 3)); //Cidade 137-151 registros.Append(p.Sacado.Endereco.Cidade.Trim().RemoverCaracteres().FormatStringDireita(15, ' ')); //Sigla Estado 152-153 registros.Append(p.Sacado.Endereco.Estado.FormatStringDireita(2, ' ')); //Tipo inscricao avalista 154-154 registros.Append(p.Avalista.TipoInscricao.Equals(TTipoInscricao.tiPessoaFisica) ? "1" : p.Avalista.TipoInscricao.Equals(TTipoInscricao.tiPessoaJuridica) ? "2" : "0"); //Inscricao avalista 155-169 registros.Append(p.Avalista.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(15, '0')); //Nome avalista 170-209 registros.Append(p.Avalista.Nome.RemoverCaracteres().FormatStringDireita(40, ' ')); //Filler 210-240 registros.Append("".FormatStringDireita(31, ' ')); Remessa.AppendLine(registros.ToString()); tot_registro++; lote++; #endregion }); #endregion #region Registro Trailer Lote registros = new StringBuilder(); //Codigo Banco 001-003 registros.Append(CodigoBanco); //Lote Servico 004-007 registros.Append("0001"); //Tipo registro 008-008 registros.Append("5"); //Brancos 009-017 registros.Append("".FormatStringDireita(9, ' ')); //Quantidade total registros lote 018-023 registros.Append((lote + 1).ToString().FormatStringEsquerda(6, '0')); //Quantidade titulos 024-029 registros.Append(cobranca.Titulos.Count.FormatStringEsquerda(6, '0')); //Valor titulos 030-046 registros.Append(cobranca.Titulos.Sum(p => p.Vl_documento).SoNumero().FormatStringEsquerda(17, '0')); //Zeros 047-115 registros.Append("0".FormatStringEsquerda(69, '0')); //Filler 116-240 registros.Append("".FormatStringDireita(125, ' ')); Remessa.AppendLine(registros.ToString()); tot_registro++; #endregion #region Trailer Arquivo registros = new StringBuilder(); //Codigo banco 001-003 registros.Append(CodigoBanco); //Lote servico 004-007 registros.Append("9999"); //Tipo registro 008-008 registros.Append("9"); //Brancos 009-017 registros.Append(string.Empty.FormatStringDireita(9, ' ')); //Quantidade Lotes 018-023 registros.Append("000001"); //Quantidade registros 024-029 registros.Append((tot_registro + 1).FormatStringEsquerda(6, '0')); //Qtd contas 030-035 registros.Append("000000"); //Brancos 036-240 registros.Append(string.Empty.FormatStringDireita(205, ' ')); Remessa.AppendLine(registros.ToString()); #endregion }
public static void ProcessarRemessa(TRegistro_LoteRemessa val, BancoDados.TObjetoBanco banco) { bool st_transacao = false; TCD_LoteRemessa qtb_lote = new TCD_LoteRemessa(); try { if (banco == null) { st_transacao = qtb_lote.CriarBanco_Dados(true); } else { qtb_lote.Banco_Dados = banco; } if (val.lTitulos.Count < 1) { throw new Exception("Lote não possui titulos para gerar arquivo remessa."); } TList_CadCFGBanco lCfgBanco = TCN_CadCFGBanco.Buscar(string.Empty, val.lTitulos[0].Cd_banco, val.Cd_empresa, val.lTitulos[0].Cedente.CodigoCedente, "CR", val.Cd_contager, "A", string.Empty, 1, qtb_lote.Banco_Dados); if (lCfgBanco.Count < 1) { throw new Exception("Não existe configuração para emissão de bloquetos para o banco: " + val.lTitulos[0].Cd_banco); } //Criar registro cobranca blCobranca rCobranca = new blCobranca(); if (val.Nr_arqRemessa > decimal.Zero) { rCobranca.SequencialArq = val.Nr_arqRemessa; } else { //Sequencial do Arquivo object obj = new TCD_LoteRemessa(qtb_lote.Banco_Dados).BuscarEscalar( new Utils.TpBusca[] { new Utils.TpBusca() { vNM_Campo = "a.id_config", vOperador = "=", vVL_Busca = lCfgBanco[0].Id_configstr } }, "isnull(max(a.nr_arqremessa), 0)"); rCobranca.SequencialArq = obj == null ? 1 : decimal.Parse(obj.ToString()) + 1; val.Nr_arqRemessa = rCobranca.SequencialArq; } rCobranca.Cd_instrucao = blCobranca.TratarInstrucaoRemessa(val.lTitulos[0].Cd_banco, val.Tp_instrucao); rCobranca.DataArquivo = CamadaDados.UtilData.Data_Servidor(qtb_lote.Banco_Dados); rCobranca.LayoutArquivo = lCfgBanco[0].Tp_layoutremessa.Trim().Equals("2") ? TLayoutArquivo.laCNAB240 : lCfgBanco[0].Tp_layoutremessa.Trim().Equals("4") ? TLayoutArquivo.laCNAB400 : TLayoutArquivo.laOutro; rCobranca.TipoMovimento = TTipoMovimento.tmRemessa; rCobranca.Cd_bancocorrespondente = lCfgBanco[0].Cd_bancocorrespondente; rCobranca.Titulos = val.lTitulos; if (rCobranca.GerarRemessa(val.lTitulos[0].Cd_banco, val.Path_remessa)) { val.St_registro = "P";//Processado val.Dt_lote = rCobranca.DataArquivo; Gravar(val, qtb_lote.Banco_Dados); } if (st_transacao) { qtb_lote.Banco_Dados.Commit_Tran(); } } catch (Exception ex) { if (st_transacao) { qtb_lote.Banco_Dados.RollBack_Tran(); } throw new Exception("Erro gerar arquivo remessa: " + ex.Message.Trim()); } finally { if (st_transacao) { qtb_lote.deletarBanco_Dados(); } } }
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 //Identificacao do Header 001-001 registros.Append("0"); //Identificacao do arquivo remessa 002-002 registros.Append("1"); //Literal REMESSA 003-009 registros.Append("REMESSA".FormatStringDireita(7, ' ')); //Codigo servico cobranca 010-011 registros.Append("01"); //Literal COBRANCA 012-026 registros.Append("COBRANCA".FormatStringDireita(15, ' ')); //Codigo Transmissão 027-046 registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.CodigoAgencia + aCobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(8, '0') + (aCobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.Length > 8 ? aCobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.Substring(0, 8) : aCobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(8, '0'))); //Nome Empresa 047-076 registros.Append(aCobranca.Titulos[0].Cedente.Nome.FormatStringDireita(30, ' ')); //Numero Banco Camara Compensacao 077-079 registros.Append(CodigoBanco.Trim()); //Nome Banco Extenso 080-094 registros.Append(NomeBanco.FormatStringDireita(15, ' ')); //Data Arquivo 095-100 registros.Append(aCobranca.DataArquivo.ToString("ddMMyy")); //Brancos 101-116 registros.Append("".FormatStringDireita(16, '0')); //Mensagem 1 117-163 registros.Append("".FormatStringDireita(47, ' ')); //Mensagem 2 164-210 registros.Append("".FormatStringDireita(47, ' ')); //Mensagem 3 211-257 registros.Append("".FormatStringDireita(47, ' ')); //Mensagem 4 258-304 registros.Append("".FormatStringDireita(47, ' ')); //Mensagem 5 305-351 registros.Append("".FormatStringDireita(47, ' ')); //Brancos 352-391 registros.Append("".FormatStringDireita(40, ' ')); //Numero versão remessa <opcional> 392-394 registros.Append("000"); //Sequencial do registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion #region Registro Detalhe aCobranca.Titulos.ForEach(p => { #region Detalhe do titulo registros = new StringBuilder(); //Identificao registro 001-001 registros.Append("1"); //Tipo Inscrição Beneficiario 002-003 registros.Append(p.Cedente.TipoInscricao == TTipoInscricao.tiPessoaJuridica ? "02" : "01"); //CNPJ/CPF 004-017 registros.Append(p.Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); //Agencia Beneficiario 018-021 registros.Append(p.Cedente.ContaBancaria.CodigoAgencia); //Codigo Cedente 022-029 registros.Append(p.Cedente.CodigoCedente.Length > 8 ? p.Cedente.CodigoCedente.Substring(0, 8) : p.Cedente.CodigoCedente.FormatStringEsquerda(8, '0')); //Conta Corrente 030-037 registros.Append(p.Cedente.ContaBancaria.NumeroConta.Length > 8 ? p.Cedente.ContaBancaria.NumeroConta.Substring(0, 8) : p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(8, '0')); //Numero controle do participante 038-062 registros.Append("".FormatStringDireita(25, ' ')); //Nosso Numero 063-070 registros.Append(p.Nosso_numero + p.Digito_NossoNumero); //Data Segundo Desconto 071-076 registros.Append("000000"); //Brancos 077-077 registros.Append(" "); //Multa 078-078 registros.Append(p.Pc_multa > decimal.Zero ? "4" : "0"); //% Multa 079-082 registros.Append(p.Pc_multa.ToString("N2", new System.Globalization.CultureInfo("pt-BR", true)).SoNumero().FormatStringEsquerda(4, '0')); //Unidade valor moeda 083-084 registros.Append("00"); //Valor titulo outra unidade 085-097 registros.Append("".FormatStringEsquerda(13, '0')); //Brancos 098-101 registros.Append("".FormatStringDireita(4, ' ')); //Data Multa 102-107 registros.Append(p.Nr_diasmulta > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasmulta)).ToString("ddMMyy") : "000000"); //Carteira 108-108 registros.Append(p.Carteira);//5-Rapida com Registro(boleto emitido pelo cliente) //Instrução 109-110 registros.Append(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0')); //Seu numero 111-120 registros.Append((p.Nr_lancto.ToString() + p.Id_cobranca.ToString()).FormatStringEsquerda(10, '0')); //Vencimento 121-126 registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy")); //Valor titulo 127-139 registros.Append(p.Vl_documento.ToString("N2", new System.Globalization.CultureInfo("pt-BR", true)).SoNumero().FormatStringEsquerda(13, '0')); //Numero banco cobrador 140-142 registros.Append(CodigoBanco); //Agencia cobradora 143-147 registros.Append(p.Cedente.ContaBancaria.CodigoAgencia + p.Cedente.ContaBancaria.DigitoAgencia); //Especie Documento 148-149 registros.Append(ConverterEspecieDoc(p.Especie_documento)); //Aceite 150-150 registros.Append(p.Aceite_SN); //Data Emissao 151-156 registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy")); //Primeira instrução cobranca 157-158 registros.Append("00"); //Segunda instrução cobrança 159-160 registros.Append(p.St_protestarauto ? "06" : "00"); //Valor juro por dia atraso 161-173 decimal ret = decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_jurodia), 100); registros.Append((p.Tp_jurodia.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_jurodia), 100) : p.Pc_jurodia).ToString("N2", new System.Globalization.CultureInfo("pt-BR", true)).SoNumero().FormatStringEsquerda(13, '0')); //Data limite 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.Tp_desconto.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_desconto), 100) : p.Pc_desconto).ToString("N2", new System.Globalization.CultureInfo("pt-BR", true)).SoNumero().FormatStringEsquerda(13, '0')); //Valor IOF 193-205 registros.Append(decimal.Zero.ToString().FormatStringEsquerda(13, '0')); //Valor Abatimento 206-218 registros.Append(string.Empty.FormatStringEsquerda(13, '0')); //Tipo Inscricao Sacado 219-220 registros.Append(p.Sacado.TipoInscricao.Equals(TTipoInscricao.tiPessoaFisica) ? "01" : "02"); //Numero Inscricao Sacado 221-234 registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); //Nome Sacado 235-274 registros.Append(p.Sacado.Nome.RemoverCaracteres().FormatStringDireita(40, ' ')); //Endereco Sacado 275-314 registros.Append((p.Sacado.Endereco.Rua.RemoverCaracteres().Trim() + p.Sacado.Endereco.Numero.RemoverCaracteres().Trim()).FormatStringDireita(40, ' ')); //Bairro Sacado 315-326 registros.Append(p.Sacado.Endereco.Bairro.RemoverCaracteres().FormatStringDireita(12, ' ')); //CEP Sacado 327-334 registros.Append(p.Sacado.Endereco.CEP.SoNumero().FormatStringEsquerda(8, '0')); //Municipio Sacado 335-349 registros.Append(p.Sacado.Endereco.Cidade.RemoverCaracteres().FormatStringDireita(15, ' ')); //UF Sacado 350-351 registros.Append(p.Sacado.Endereco.Estado.RemoverCaracteres().FormatStringDireita(2, ' ')); //Brancos 352-382 registros.Append("".FormatStringDireita(31, ' ')); //Identificador do complemento 383-383 registros.Append("I"); //Complemento 384-385 registros.Append(p.Cedente.ContaBancaria.NumeroConta.Substring(p.Cedente.ContaBancaria.NumeroConta.Length - 1, 1) + p.Cedente.ContaBancaria.DigitoConta); //Brancos 386-391 registros.Append("".FormatStringDireita(6, ' ')); //Numero dias para protesto 392-393 registros.Append(p.St_protestarauto ? p.Nr_diasprotestar.FormatStringEsquerda(2, '0') : "00"); //Brancos 394-394 registros.Append(" "); //sequencial do registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion }); #endregion #region Trailer registros = new StringBuilder(); //Identificacao registro 001-001 registros.Append("9"); //Quantidade Documentos 002-007 registros.Append(aCobranca.Titulos.Count.FormatStringEsquerda(6, '0')); //Valor Documentos 008-020 registros.Append(aCobranca.Titulos.Sum(p => p.Vl_documento).ToString("N2", new System.Globalization.CultureInfo("pt-BR", true)).SoNumero().FormatStringEsquerda(13, '0')); //Zeros 021-394 registros.Append("".FormatStringEsquerda(374, '0')); //Sequencial registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion }
private bool LerRetornoCNAB400(blCobranca ACobranca, string[] Retorno) { string ACodigoBanco; string ACodigoCedente; int NumeroRegistro = 0; blTitulo ATitulo = null; try { //{ Lê registro HEADER} ACodigoBanco = Retorno[NumeroRegistro].Substring(76, 3); if (ACodigoBanco != CodigoBanco) { throw new Exception("Este não é um retorno de cobrança do banco " + CodigoBanco + " " + NomeBanco); } //Buscar codigo cedente ACodigoCedente = Convert.ToInt32(Retorno[NumeroRegistro].Substring(26, 20)).ToString(); if (Retorno[NumeroRegistro].Substring(94, 6).PadLeft(6, '0') != "000000") { ACobranca.DataArquivo = new DateTime(2000 + Convert.ToInt32(Retorno[NumeroRegistro].Substring(98, 2)), Convert.ToInt32(Retorno[NumeroRegistro].Substring(96, 2)), Convert.ToInt32(Retorno[NumeroRegistro].Substring(94, 2))); } else { ACobranca.DataArquivo = DateTime.Now; } //{Lê os registros DETALHE} //{Processa até o penúltimo registro porque o último contém apenas o TRAILLER} for (NumeroRegistro = 1; NumeroRegistro <= (Retorno.Length - 2); NumeroRegistro++) { //{Confirmar se o tipo do registro é 1} if (Retorno[NumeroRegistro].Substring(0, 1) != "1") { continue; //{Não processa o registro atual} } //Dados Titulo ATitulo = new blTitulo(); ATitulo.Cedente.ContaBancaria.Banco.Codigo = ACodigoBanco; ATitulo.Cedente.CodigoCedente = ACodigoCedente; //Nosso numero ATitulo.Nosso_numero = Retorno[NumeroRegistro].Substring(70, 11); //Ocorrencia ATitulo.Cd_ocorrencia = Retorno[NumeroRegistro].Substring(108, 2); //Descricao ocorrencia ATitulo.Ds_ocorrencia = TratarOcorrencia(ATitulo.Cd_ocorrencia); //Data ocorrencia if (Retorno[NumeroRegistro].Substring(110, 6).PadLeft(6, '0') != "000000") { ATitulo.Dt_ocorrencia = new DateTime(2000 + Convert.ToInt32(Retorno[NumeroRegistro].Substring(114, 2)), Convert.ToInt32(Retorno[NumeroRegistro].Substring(112, 2)), Convert.ToInt32(Retorno[NumeroRegistro].Substring(110, 2))); } else { ATitulo.Dt_ocorrencia = DateTime.Now; } //Data vencimento if (Retorno[NumeroRegistro].Substring(146, 6).PadLeft(6, '0') != "000000") { ATitulo.Dt_vencimento = new DateTime(2000 + Convert.ToInt32(Retorno[NumeroRegistro].Substring(150, 2)), Convert.ToInt32(Retorno[NumeroRegistro].Substring(148, 2)), Convert.ToInt32(Retorno[NumeroRegistro].Substring(146, 2))); } else { ATitulo.Dt_vencimento = null; } //Valor titulo if (Retorno[NumeroRegistro].Substring(152, 13).PadLeft(13, '0') != "0000000000000") { ATitulo.Vl_documento = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(152, 13)) / 100; } else { ATitulo.Vl_documento = decimal.Zero; } //Valor despesas if (Retorno[NumeroRegistro].Substring(175, 13).PadLeft(13, '0') != "0000000000000") { ATitulo.Vl_despesa_cobranca = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(175, 13)) / 100; } else { ATitulo.Vl_despesa_cobranca = decimal.Zero; } //Abatimento if (Retorno[NumeroRegistro].Substring(227, 13).PadLeft(13, '0') != "0000000000000") { ATitulo.Vl_abatimento = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(227, 13)) / 100; } else { ATitulo.Vl_abatimento = decimal.Zero; } //Desconto if (Retorno[NumeroRegistro].Substring(240, 13).PadLeft(13, '0') != "0000000000000") { ATitulo.Vl_desconto = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(240, 13)) / 100; } else { ATitulo.Vl_desconto = decimal.Zero; } //Juro if (Retorno[NumeroRegistro].Substring(266, 13).PadLeft(13, '0') != "0000000000000") { ATitulo.Vl_morajuros = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(266, 13)) / 100; } else { ATitulo.Vl_morajuros = decimal.Zero; } //Outros creditos if (Retorno[NumeroRegistro].Substring(279, 13).PadLeft(13, '0') != "0000000000000") { ATitulo.vl_outros_creditos = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(279, 13)) / 100; } else { ATitulo.vl_outros_creditos = decimal.Zero; } //Motivo ocorrencia string codigo = Retorno[NumeroRegistro].Substring(318, 10); if (!string.IsNullOrEmpty(codigo)) { if (codigo.Substring(0, 2) != "00") { ATitulo.Ds_motivoocorrencia += TratarMotivo(ATitulo.Cd_ocorrencia, codigo.Substring(0, 2)) + "|"; } if (codigo.Substring(2, 2) != "00") { ATitulo.Ds_motivoocorrencia += TratarMotivo(ATitulo.Cd_ocorrencia, codigo.Substring(2, 2)) + "|"; } if (codigo.Substring(4, 2) != "00") { ATitulo.Ds_motivoocorrencia += TratarMotivo(ATitulo.Cd_ocorrencia, codigo.Substring(4, 2)) + "|"; } if (codigo.Substring(6, 2) != "00") { ATitulo.Ds_motivoocorrencia += TratarMotivo(ATitulo.Cd_ocorrencia, codigo.Substring(6, 2)) + "|"; } if (codigo.Substring(8, 2) != "00") { ATitulo.Ds_motivoocorrencia += TratarMotivo(ATitulo.Cd_ocorrencia, codigo.Substring(8, 2)) + "|"; } } if (!string.IsNullOrEmpty(ATitulo.Ds_motivoocorrencia)) { if (ATitulo.Ds_motivoocorrencia.Substring(ATitulo.Ds_motivoocorrencia.Trim().Length - 1, 1).Equals("|")) { ATitulo.Ds_motivoocorrencia = ATitulo.Ds_motivoocorrencia.Remove(ATitulo.Ds_motivoocorrencia.Trim().Length - 1, 1); } } //Data credito if (Retorno[NumeroRegistro].Substring(295, 6).Trim().PadLeft(6, '0') != "000000") { ATitulo.Dt_credito = new DateTime(2000 + Convert.ToInt32(Retorno[NumeroRegistro].Substring(299, 2)), Convert.ToInt32(Retorno[NumeroRegistro].Substring(297, 2)), Convert.ToInt32(Retorno[NumeroRegistro].Substring(295, 2))); ATitulo.Dt_creditotaxa = ATitulo.Dt_credito; } else { ATitulo.Dt_credito = DateTime.Now; ATitulo.Dt_creditotaxa = ATitulo.Dt_credito; } //Inserir titulo na lista ACobranca.Titulos.Add(ATitulo); } return(true); } catch (Exception ex) { throw new Exception(ex.Message); } }
private bool GerarRemessaCNAB240(blCobranca ACobranca, StringBuilder Remessa) { string ACedenteTipoInscricao; string ASacadoTipoInscricao; string Registro = ""; int NumeroRegistro = 0; int NumeroLote = 1; /* * if (ACobranca.Titulos.Count < 1) * throw new Exception("Não há títulos para gerar remessa"); * * //{ GERAR REGISTRO-HEADER DO ARQUIVO } * switch ACobranca.Titulos[NumeroRegistro]. * * case Titulos[NumeroRegistro].Cedente.TipoInscricao of * tiPessoaFisica : ACedenteTipoInscricao := '1'; * tiPessoaJuridica: ACedenteTipoInscricao := '2'; * tiOutro : ACedenteTipoInscricao := '3'; * end; * * if Formatar(CodigoBanco,3,false,'0') <> Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.Banco.Codigo,3,false,'0') then * Raise Exception.CreateFmt('O título (Nosso Número: %s) não pertence ao banco %s (%s)',[Titulos[NumeroRegistro].NossoNumero,CodigoBanco,NomeBanco]); * * Registro := Formatar(CodigoBanco,3,false,'0'); {1 a 3 - Código do banco} * Registro := Registro + '0000'; {4 a 7 - Lote de serviço} * Registro := Registro + '0'; {8 - Tipo de registro - Registro header de arquivo} * Registro := Registro + Formatar('',9); {9 a 17 - Uso exclusivo FEBRABAN/CNAB} * Registro := Registro + ACedenteTipoInscricao; {18 - Tipo de inscrição do cedente} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.NumeroCPFCGC,14,false,'0'); {19 a 32 - Número de inscrição do cedente} * * {CÓDIGO DO CONVÊNIO = AGÊNCIA + NÚMERO CONVÊNIO + DV} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,4,false,'0'); {33 a 36 - Código da agência} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.CodigoCedente,11,false,'0'); {37 a 47 - Código do convênio no banco} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.DigitoCodigoCedente,1,false,'0'); {48 - Dígito do código do convênio no banco} * * Registro := Registro + Formatar('',4); {49 a 52 - Uso exclusivo CAIXA} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0'); {53 a 57 - Código da agência do cedente} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoAgencia,1,false,'0'); {58 - Dígito do código da agência do cedente} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0'); {59 a 70 - Código da conta corrente vinculada à cobrança / não é o número da conta corrente comum} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoConta,1,false,'0'); {71 - Dígito da conta corrente vinculada à cobrança} * Registro := Registro + Modulo11(Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0')+Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0')); {72 - Dígito verificador da agência / conta do cedente} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.Nome,30,true,' '); {73 a 102 - Nome do cedente} * Registro := Registro + Formatar('CAIXA ECONOMICA FEDERAL',30,true,' '); {103 a 132 - Nome do banco} * Registro := Registro + Formatar('',10); {133 a 142 - Uso exclusivo FEBRABAN/CNAB} * Registro := Registro + '1'; {143 - Código de Remessa (1) / Retorno (2)} * Registro := Registro + FormatDateTime('ddmmyyyy',DataArquivo); {144 a 151 - Data do de geração do arquivo} * Registro := Registro + FormatDateTime('hhmmss',DataArquivo); {152 a 157 - Hora de geração do arquivo} * Registro := Registro + Formatar(IntToStr(NumeroArquivo),6,false,'0'); {158 a 163 Número seqüencial do arquivo} * Registro := Registro + '030'; {164 a 166 - Número da versão do layout do arquivo} * Registro := Registro + Formatar('',5,false,'0'); {167 a 171 - Densidade de gravação do arquivo (BPI)} * Registro := Registro + Formatar('',20); {172 a 191 - Uso reservado do banco} * if TipoMovimento = tmRemessaTeste then * Registro := Registro + Formatar('REMESSA-TESTE',20) {192 a 211 - Deverá conter a literal REMESSA-TESTE para fase de testes} * else * Registro := Registro + Formatar('',20); {192 a 211 - Deverá conter a literal REMESSA-TESTE para fase de testes} * Registro := Registro + Formatar('',29); {212 a 240 - Uso exclusivo FEBRABAN/CNAB} * * Remessa.Add(Registro); * Registro := ''; * * {GERAR REGISTRO HEADER DO LOTE} * Registro := Formatar(CodigoBanco,3,false,'0'); {1a 3 - Código do banco} * Registro := Registro + Formatar(IntToStr(NumeroLote),4,false,'0'); {4 a 7 - Número do lote de serviço} * Registro := Registro + '1'; {8 - Tipo do registro - Registro header de lote} * Registro := Registro + 'R'; {9 - Tipo de operação: R (Remessa) ou T (Retorno)} * Registro := Registro + '01'; {10 a 11 - Tipo de serviço: 01 (Cobrança)} * Registro := Registro + '00'; {12 a 13 - Forma de lançamento: preencher com ZEROS no caso de cobrança} * Registro := Registro + '020'; {14 a 16 - Número da versão do layout do lote} * Registro := Registro + ' '; {17 - Uso exclusivo FEBRABAN/CNAB} * Registro := Registro + ACedenteTipoInscricao; {18 - Tipo de inscrição do cedente} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.NumeroCPFCGC,15,false,'0'); {19 a 33 - Número de inscrição do cedente} * * {CÓDIGO DO CONVÊNIO = AGÊNCIA + NÚMERO CONVÊNIO + DV} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,4,false,'0'); {34 a 37 - Código da agência} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.CodigoCedente,11,false,'0'); {38 a 48 - Código do convênio no banco} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.DigitoCodigoCedente,1,false,'0'); {49 - Dígito do código do convênio no banco} * * Registro := Registro + Formatar('',4); {50 a 53 - Uso exclusivo CAIXA} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0'); {54 a 58 - Código da agência do cedente} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoAgencia,1,false,'0'); {59 - Dígito da agência do cedente} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0'); {60 a 71 - Número da conta vinculada à cobrança / não é o número da conta corrente comum} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoConta,1,false,'0'); {72 - Dígito do código do cedente no banco} * Registro := Registro + Modulo11(Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0')+Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0')); {73 - Dígito verificador da agência / conta} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.Nome,30,true,' '); {74 a 103 - Nome do cedente} * Registro := Registro + Formatar('',40); {104 a 143 - Mensagem 1 para todos os boletos do lote} * Registro := Registro + Formatar('',40); {144 a 183 - Mensagem 2 para todos os boletos do lote} * Registro := Registro + Formatar(IntToStr(NumeroArquivo),8,false,'0'); {184 a 191 - Número do arquivo} * Registro := Registro + FormatDateTime('ddmmyyyy',DataArquivo); {192 a 199 - Data de geração do arquivo} * Registro := Registro + FormatDateTime('ddmmyyyy',DataArquivo); {200 a 207 - Data do crédito - Informar a mesma data da gravação do arquivo} * Registro := Registro + Formatar('',33); {208 a 240 - Uso exclusivo FEBRABAN/CNAB} * * Remessa.Add(Registro); * Registro := ''; * * { GERAR TODOS OS REGISTROS DETALHE DA REMESSA } * while NumeroRegistro <= (Titulos.Count - 1) do * begin * * if Formatar(CodigoBanco,3,false,'0') <> Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.Banco.Codigo,3,false,'0') then * Raise Exception.CreateFmt('O título (Nosso Número: %s) não pertence ao banco %s (%s)',[Titulos[NumeroRegistro].NossoNumero,CodigoBanco,NomeBanco]); * * {SEGMENTO P} * if Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.Banco.Codigo,3,false,'0') <> Formatar(CodigoBanco,3,false,'0') then * Raise Exception.CreateFmt('Titulo não pertence ao banco %s - %s',[CodigoBanco,NomeBanco]); * * case Titulos[NumeroRegistro].Cedente.TipoInscricao of * tiPessoaFisica : ACedenteTipoInscricao := '1'; * tiPessoaJuridica: ACedenteTipoInscricao := '2'; * tiOutro : ACedenteTipoInscricao := '9'; * end; * * Registro := Formatar(CodigoBanco,3,false,'0'); {1 a 3 - Código do banco} * Registro := Registro + Formatar(IntToStr(NumeroLote),4,false,'0'); {4 a 7 - Número do lote} * Registro := Registro + '3'; {8 - Tipo do registro: Registro detalhe} * Registro := Registro + Formatar(IntToStr(2*NumeroRegistro+1),5,false,'0'); {9 a 13 - Número seqüencial do registro no lote - Cada título tem 2 registros (P e Q)} * Registro := Registro + 'P'; {14 - Código do segmento do registro detalhe} * Registro := Registro + ' '; {15 - Uso exclusivo FEBRABAN/CNAB: Branco} * case Titulos[NumeroRegistro].TipoOcorrencia of {16 a 17 - Código de movimento} * toRemessaRegistrar : Registro := Registro + '01'; * toRemessaBaixar : Registro := Registro + '02'; * toRemessaConcederAbatimento : Registro := Registro + '04'; * toRemessaCancelarAbatimento : Registro := Registro + '05'; * toRemessaConcederDesconto : Registro := Registro + '07'; * toRemessaCancelarDesconto : Registro := Registro + '08'; * toRemessaAlterarVencimento : Registro := Registro + '06'; * toRemessaProtestar : Registro := Registro + '09'; * toRemessaCancelarInstrucaoProtesto : Registro := Registro + '10'; * toRemessaDispensarJuros : Registro := Registro + '31'; * toRemessaAlterarNomeEnderecoSacado : Registro := Registro + '31'; * else * Raise Exception.CreateFmt('Ocorrência inválida em remessa - Nosso número: %s / Seu número: %s',[Titulos[NumeroRegistro].NossoNumero,Titulos[NumeroRegistro].SeuNumero]); * end; {case Titulos[NumeroRegistro].TipoOcorrencia} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0'); {18 a 22 - Agência mantenedora da conta} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoAgencia,1,false,'0'); {23 - Dígito verificador da agência} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0'); {24 a 35 - Número da conta vinculada à cobrança / não é o número da conta corrente comum} * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoConta,1,false,'0'); {36 - Dígito da conta vinculada à cobrança} * Registro := Registro + Modulo11(Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0')+Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0')); {37 - Dígito verificador da agência / conta} * Registro := Registro + Formatar('',9); {38 a 46 - Uso exclusivo CAIXA: Brancos} * Registro := Registro + Formatar(Titulos[NumeroRegistro].NossoNumero,11,false,'0'); {47 a 57 - Nosso número - identificação do título no banco} * Registro := Registro + '1'; {58 - Cobrança Simples} * Registro := Registro + '1'; {59 - Forma de cadastramento do título no banco: com cadastramento} * Registro := Registro + '2'; {60 - Tipo de documento: Escritural} * case Titulos[NumeroRegistro].EmissaoBoleto of {61 a 62 - Quem emite e quem distribui o boleto?} * ebBancoEmite : Registro := Registro + '1' + '1'; * ebClienteEmite : Registro := Registro + '2' + '2'; * ebBancoReemite : Registro := Registro + '4' + '1'; * ebBancoNaoReemite : Registro := Registro + '5' + '2'; * else * Raise Exception.CreateFmt('Identificação inválida de emissão de boleto em remessa - Nosso número: %s / Seu número: %s',[Titulos[NumeroRegistro].NossoNumero,Titulos[NumeroRegistro].SeuNumero]); * end; {case Titulos[NumeroRegistro].EmissaoBoleto} * Registro := Registro + Formatar(Titulos[NumeroRegistro].SeuNumero,11,false,'0'); {63 a 73 - Número que identifica o título na empresa} * Registro := Registro + Formatar('',4); {74 a 77 - Uso exclusivo CAIXA: Brancos} * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataVencimento); {78 a 85 - Data de vencimento do título} * Registro := Registro + FormatCurr('000000000000000',Titulos[NumeroRegistro].ValorDocumento * 100); {86 a 100 - Valor nominal do título} * Registro := Registro + '00000'; {101 a 105 - Agência cobradora. Deixar zerado. A Caixa determinará automaticamente pelo CEP do sacado} * Registro := Registro + '0'; {106 - Dígito da agência cobradora} * case Titulos[NumeroRegistro].EspecieDocumento of {107 a 108 - Espécie do documento} * edApoliceSeguro : Registro := Registro + '20'; {AP APÓLICE DE SEGURO} * edCheque : Registro := Registro + '01'; {CH CHEQUE} * edDuplicataMercantil : Registro := Registro + '02'; {DM DUPLICATA MERCANTIL} * edDuplicataMercantialIndicacao : Registro := Registro + '03'; {DMI DUPLICATA MERCANTIL P/ INDICAÇÃO} * edDuplicataRural : Registro := Registro + '06'; {DR DUPLICATA RURAL} * edDuplicataServico : Registro := Registro + '04'; {DS DUPLICATA DE SERVIÇO} * edDuplicataServicoIndicacao : Registro := Registro + '05'; {DSI DUPLICATA DE SERVIÇO P/ INDICAÇÃO} * edFatura : Registro := Registro + '18'; {FAT FATURA} * edLetraCambio : Registro := Registro + '07'; {LC LETRA DE CÂMBIO} * edMensalidadeEscolar : Registro := Registro + '21'; {ME MENSALIDADE ESCOLAR} * edNotaCreditoComercial : Registro := Registro + '08'; {NCC NOTA DE CRÉDITO COMERCIAL} * edNotaCreditoExportacao : Registro := Registro + '09'; {NCE NOTA DE CRÉDITO A EXPORTAÇÃO} * edNotaCreditoIndustrial : Registro := Registro + '10'; {NCI NOTA DE CRÉDITO INDUSTRIAL} * edNotaCreditoRural : Registro := Registro + '11'; {NCR NOTA DE CRÉDITO RURAL} * edNotaDebito : Registro := Registro + '19'; {ND NOTA DE DÉBITO} * edNotaPromissoria : Registro := Registro + '12'; {NP NOTA PROMISSÓRIA} * edNotaPromissoriaRural : Registro := Registro + '13'; {NPR NOTA PROMISSÓRIA RURAL} * edNotaSeguro : Registro := Registro + '16'; {NS NOTA DE SEGURO} * edParcelaConsorcio : Registro := Registro + '22'; {PC PARCELA DE CONSORCIO} * edRecibo : Registro := Registro + '17'; {RC RECIBO} * edTriplicataMercantil : Registro := Registro + '14'; {TM TRIPLICATA MERCANTIL} * edTriplicataServico : Registro := Registro + '15' {TS TRIPLICATA DE SERVIÇO} * else * Registro := Registro + '99'; {OUTROS} * end; {case Titulos[NumeroRegistro].EspecieDocumento} * case Titulos[NumeroRegistro].AceiteDocumento of {109 - Identificação de título Aceito / Não aceito} * adSim : Registro := Registro + 'A'; * adNao : Registro := Registro + 'N'; * end; {case Titulos[NumeroRegistro].AceiteDocumento} * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataDocumento); {110 a 117 - Data da emissão do documento} * if Titulos[NumeroRegistro].ValorMoraJuros > 0 then * begin * Registro := Registro + '1'; {118 - Código de juros de mora: Valor por dia} * if Titulos[NumeroRegistro].DataMoraJuros <> null then * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataMoraJuros) {119 a 126 - Data a partir da qual serão cobrados juros} * else * Registro := Registro + Formatar('',8,false,'0'); {119 a 126 - Data a partir da qual serão cobrados juros} * Registro := Registro + FormatCurr('000000000000000',Titulos[NumeroRegistro].ValorMoraJuros * 100); {127 a 141 - Valor de juros de mora por dia} * end * else * begin * Registro := Registro + '4'; {118 - Código de juros de mora: Acata cadastramento na CAIXA} * Registro := Registro + Formatar('',8,false,'0'); {119 a 126 - Data a partir da qual serão cobrados juros} * Registro := Registro + Formatar('',15,false,'0'); {127 a 141 - Valor de juros de mora por dia} * end; * if Titulos[NumeroRegistro].ValorDesconto > 0 then * begin * Registro := Registro + '1'; {142 - Código de desconto: Valor fixo até a data informada} * if Titulos[NumeroRegistro].DataDesconto <> null then * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataDesconto) {143 a 150 - Data do desconto} * else * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataVencimento); {143 a 150 - se não houver desconto, deve ser informada a mesma data do vencimento} * Registro := Registro + FormatCurr('000000000000000',Titulos[NumeroRegistro].ValorDesconto * 100); {151 a 165 - Valor do desconto por dia} * end * else * begin * Registro := Registro + '0'; {142 - Código de desconto: Sem desconto} * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataVencimento); {143 a 150 - se não houver desconto, deve ser informada a mesma data do vencimento} * Registro := Registro + Formatar('',15,false,'0'); {151 a 165 - Valor do desconto por dia} * end; * Registro := Registro + FormatCurr('000000000000000',Titulos[NumeroRegistro].ValorIOF * 100); {166 a 180 - Valor do IOF a ser recolhido} * Registro := Registro + FormatCurr('000000000000000',Titulos[NumeroRegistro].ValorAbatimento * 100); {181 a 195 - Valor do abatimento} * Registro := Registro + Formatar(Titulos[NumeroRegistro].SeuNumero,25); {196 a 220 - Identificação do título na empresa} * if (Titulos[NumeroRegistro].DataProtesto <> null) and (Titulos[NumeroRegistro].DataProtesto > Titulos[NumeroRegistro].DataVencimento) then * begin * Registro := Registro + '1'; {221 - Código de protesto: Protestar em XX dias corridos} * Registro := Registro + Formatar(IntToStr(DaysBetween(Titulos[NumeroRegistro].DataProtesto, Titulos[NumeroRegistro].DataVencimento)),2,false,'0'); {222 a 223 - Prazo para protesto (em dias corridos)} * end * else * begin * Registro := Registro + '3'; {221 - Código de protesto: Não protestar} * Registro := Registro + Formatar('',2,false,'0'); {222 a 223 - Prazo para protesto (em dias corridos)} * end; * if (Titulos[NumeroRegistro].DataBaixa <> null) and (Titulos[NumeroRegistro].DataBaixa > Titulos[NumeroRegistro].DataVencimento) then * begin * Registro := Registro + '1'; {224 - Código para baixa/devolução: Baixar/devolver} * Registro := Registro + Formatar(IntToStr(DaysBetween(Titulos[NumeroRegistro].DataBaixa,Titulos[NumeroRegistro].DataVencimento)),3,false,'0'); {225 a 227 - Prazo para baixa/devolução (em dias corridos)} * end * else * begin * Registro := Registro + '2'; {224 - Código para baixa/devolução: Não baixar/não devolver} * Registro := Registro + Formatar('',3,false,'0'); {Prazo para baixa/devolução (225 a 227 - em dias corridos)} * end; * Registro := Registro + '09'; {228 a 229 - Código da moeda: Real} * Registro := Registro + Formatar('',10); {230 a 239 - Uso exclusivo FEBRABAN/CNAB} * Registro := Registro + Formatar('',1); {240 - Uso exclusivo FEBRABAN/CNAB} * * Remessa.Add(Registro); * Registro := ''; * * {SEGMENTO Q} * case Titulos[NumeroRegistro].Sacado.TipoInscricao of * tiPessoaFisica : ASacadoTipoInscricao := '1'; * tiPessoaJuridica: ASacadoTipoInscricao := '2'; * tiOutro : ASacadoTipoInscricao := '9'; * end; * * Registro := Formatar(CodigoBanco,3,false,'0'); {Código do banco} * Registro := Registro + Formatar(IntToStr(NumeroLote),4,false,'0'); {Número do lote} * Registro := Registro + '3'; {Tipo do registro: Registro detalhe} * Registro := Registro + Formatar(IntToStr(2*NumeroRegistro+2),5,false,'0'); {Número seqüencial do registro no lote - Cada título tem 2 registros (P e Q)} * Registro := Registro + 'Q'; {Código do segmento do registro detalhe} * Registro := Registro + ' '; {Uso exclusivo FEBRABAN/CNAB: Branco} * case Titulos[NumeroRegistro].TipoOcorrencia of {Código de movimento} * toRemessaRegistrar : Registro := Registro + '01'; * toRemessaBaixar : Registro := Registro + '02'; * toRemessaConcederAbatimento : Registro := Registro + '04'; * toRemessaCancelarAbatimento : Registro := Registro + '05'; * toRemessaConcederDesconto : Registro := Registro + '07'; * toRemessaCancelarDesconto : Registro := Registro + '08'; * toRemessaAlterarVencimento : Registro := Registro + '06'; * toRemessaProtestar : Registro := Registro + '09'; * toRemessaCancelarInstrucaoProtesto : Registro := Registro + '10'; * toRemessaDispensarJuros : Registro := Registro + '31'; * toRemessaAlterarNomeEnderecoSacado : Registro := Registro + '31'; * else * Raise Exception.CreateFmt('Ocorrência inválida em remessa - Nosso número: %s / Seu número: %s',[Titulos[NumeroRegistro].NossoNumero,Titulos[NumeroRegistro].SeuNumero]); * end; {case Titulos[NumeroRegistro].TipoOcorrencia} * {Dados do sacado} * Registro := Registro + Formatar(ASacadoTipoInscricao,1,false,'0'); * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.NumeroCPFCGC,15,false,'0'); * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Nome,40); * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Endereco.Rua+' '+Titulos[NumeroRegistro].Sacado.Endereco.Numero+' '+Titulos[NumeroRegistro].Sacado.Endereco.Complemento,40); * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Endereco.Bairro,15); * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Endereco.CEP,8,true,'0'); * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Endereco.Cidade,15,true); * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Endereco.Estado,2,false); * {Dados do sacador/avalista} * Registro := Registro + '0'; {Tipo de inscrição: Não informado} * Registro := Registro + Formatar('',15,false,'0'); {Número de inscrição} * Registro := Registro + Formatar('',40); {Nome do sacador/avalista} * * Registro := Registro + Formatar('',3); {Uso exclusivo FEBRABAN/CNAB} * Registro := Registro + Formatar('',20); {Uso exclusivo FEBRABAN/CNAB} * Registro := Registro + Formatar('',8); {Uso exclusivo FEBRABAN/CNAB} * * Remessa.Add(Registro); * NumeroRegistro := NumeroRegistro + 1; * end; {GERAR TODOS OS REGISTROS DETALHE DA REMESSA} * * {REGISTRO TRAILER DO LOTE} * Registro := Formatar(CodigoBanco,3,false,'0'); {Código do banco} * Registro := Registro + Formatar(IntToStr(NumeroLote),4,false,'0'); {Número do lote} * Registro := Registro + '5'; {Tipo do registro: Registro trailer do lote} * Registro := Registro + Formatar('',9); {Uso exclusivo FEBRABAN/CNAB} * {Quantidade de registros do lote, incluindo header e trailer do lote. * Até este momento Remessa contém: * 1 registro header de arquivo - É preciso excluí-lo desta contagem * 1 registro header de lote * Diversos registros detalhe * Falta incluir 1 registro trailer de lote * Ou seja Quantidade = Remessa.Count - 1 header de arquivo + 1 trailer de lote = Remessa.Count} * Registro := Registro + Formatar(IntToStr(Remessa.Count),6,false,'0'); * {Totalização da cobrança simples - Só é usado no arquivo retorno} * Registro := Registro + Formatar('',6,false,'0'); {Quantidade títulos em cobrança} * Registro := Registro + Formatar('',17,false,'0'); {Valor dos títulos em carteiras} * {Uso exclusivo FEBRABAN/CNAB} * Registro := Registro + Formatar('',23); {Uso exclusivo FEBRABAN/CNAB} * {Totalização da cobrança caucionada - Só é usado no arquivo retorno} * Registro := Registro + Formatar('',6,false,'0'); {Quantidade títulos em cobrança} * Registro := Registro + Formatar('',17,false,'0'); {Valor dos títulos em carteiras} * {Uso exclusivo FEBRABAN/CNAB} * Registro := Registro + Formatar('',31); {Uso exclusivo FEBRABAN/CNAB} * Registro := Registro + Formatar('',117); {Uso exclusivo FEBRABAN/CNAB} * * Remessa.Add(Registro); * Registro := ''; * * {GERAR REGISTRO TRAILER DO ARQUIVO} * Registro := Formatar(CodigoBanco,3,false,'0'); {Código do banco} * Registro := Registro + '9999'; {Lote de serviço} * Registro := Registro + '9'; {Tipo do registro: Registro trailer do arquivo} * Registro := Registro + Formatar('',9); {Uso exclusivo FEBRABAN/CNAB} * Registro := Registro + Formatar(IntToStr(NumeroLote),6,false,'0'); {Quantidade de lotes do arquivo} * Registro := Registro + Formatar(IntToStr(Remessa.Count + 1),6,false,'0'); {Quantidade de registros do arquivo, inclusive este registro que está sendo criado agora} * Registro := Registro + Formatar('',6); {Uso exclusivo FEBRABAN/CNAB} * Registro := Registro + Formatar('',205); {Uso exclusivo FEBRABAN/CNAB} * * Remessa.Add(Registro); * end; * * Result := TRUE; */ return(false); }
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 //Identificacao do Header 001-001 registros.Append("0"); //Identificacao do arquivo remessa 002-002 registros.Append("1"); //Literal REMESSA 003-009 registros.Append("REMESSA".FormatStringDireita(7, ' ')); //Codigo servico cobranca 010-011 registros.Append("01"); //Literal COBRANCA 012-026 registros.Append("COBRANCA".FormatStringDireita(15, ' ')); //Codigo cedente 027-031 registros.Append(aCobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(5, '0')); //CNPJ cedente 032-045 registros.Append(aCobranca.Titulos[0].Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); //Filler 046-076 registros.Append(string.Empty.FormatStringDireita(31, ' ')); //Numero Sicredi 077-079 registros.Append("748"); //Literal SICREDI 080-094 registros.Append("SICREDI".FormatStringDireita(15, ' ')); //Data arquivo 095-102 registros.Append(aCobranca.DataArquivo.ToString("yyyyMMdd")); //Filler 103-110 registros.Append(string.Empty.FormatStringDireita(8, ' ')); //Numero remessa 111-117 registros.Append(aCobranca.SequencialArq.ToString().FormatStringEsquerda(7, '0')); //Filler 118-390 registros.Append(string.Empty.FormatStringDireita(273, ' ')); //Versao Sistema 391-394 registros.Append("2.00"); //Numero sequencia registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion #region Registro Detalhe aCobranca.Titulos.ForEach(p => { #region Detalhe do titulo registros = new StringBuilder(); //Identificao titulo 001-001 registros.Append("1"); //Tipo cobranca 002-002 registros.Append("A"); //Com Registro //Tipo carteira 003-003 registros.Append("A"); //Simples //Tipo impressao 004-004 registros.Append("A"); //Normal //Filler 005-016 registros.Append(string.Empty.FormatStringDireita(12, ' ')); //Tipo moeda 017-017 registros.Append("A"); //Real //Tipo desconto 018-018 registros.Append(p.Tp_desconto.Trim().Equals("P") ? "B" : "A"); //Tipo juro 019-019 registros.Append(p.Tp_jurodia.Trim().Equals("P") ? "B" : "A"); //Filler 020-047 registros.Append(string.Empty.FormatStringDireita(28, ' ')); //Nosso numero 048-056 registros.Append(p.Nosso_numero.SoNumero().FormatStringEsquerda(8, '0') + p.Digito_nossonumero.Trim()); //Filler 057-062 registros.Append(string.Empty.FormatStringDireita(6, ' ')); //Data instrucao 063-070 registros.Append(aCobranca.DataArquivo.ToString("yyyyMMdd")); //Campo alterado, quando instrucao 31 071-071 registros.Append(string.Empty.FormatStringDireita(1, ' ')); //Postagem titulo 072-072 registros.Append("N"); //Nao Postar //Filler 073-073 registros.Append(string.Empty.FormatStringDireita(1, ' ')); //Emissao boleto 074-074 registros.Append("B"); //Impressao Cedente //Numero parcela carne 075-076 registros.Append("00"); //Numero total parcelas carne 077-078 registros.Append("00"); //Filler 079-082 registros.Append(string.Empty.FormatStringDireita(4, ' ')); //valor desconto por dia de antecipacao 083-092 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(10, '0')); //% multa por atrazo 093-096 if (p.Tp_multa.Trim().Equals("V")) { throw new Exception("Banco não permite multa em PERCENTUAL."); } registros.Append(p.Pc_multa.ToString().SoNumero().FormatStringEsquerda(4, '0')); //Filler 097-108 registros.Append(string.Empty.FormatStringDireita(12, ' ')); //Instrucao 109-110 registros.Append(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0')); //Seu numero 111-120 registros.Append((p.Nr_lancto.ToString() + p.Cd_parcela.ToString() + p.Id_cobranca.ToString()).FormatStringEsquerda(10, '0')); //Data vencimento 121-126 registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy")); //valor titulo 127-139 registros.Append(p.Vl_documento.ToString().SoNumero().FormatStringEsquerda(13, '0')); //Filler 140-148 registros.Append(string.Empty.FormatStringDireita(9, ' ')); //Especie documento 149-149 registros.Append(this.ConverterEspecieDoc(p.Especie_documento)); //Aceite titulo 150-150 registros.Append(p.Aceite_SN.Trim()); //Data emissao 151-156 registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy")); //Instrucao Protesto 157-158 registros.Append(p.St_protestarauto ? "06" : "00"); //Numero dias protesto 159-160 registros.Append(p.St_protestarauto ? p.Nr_diasprotestar < 3 ? "03" : p.Nr_diasprotestar > 99 ? "99" : p.Nr_diasprotestar.ToString().FormatStringEsquerda(2, '0') : "00"); //Valor/% juro dia atrazo 161-173 registros.Append(p.Pc_jurodia.ToString().SoNumero().FormatStringEsquerda(13, '0')); //Data limite desconto 174-179 registros.Append(p.Pc_desconto > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasdesconto) * -1).ToString("ddMMyy") : "000000"); //Valor/% Desconto 180-192 registros.Append((p.Pc_desconto > decimal.Zero ? p.Tp_desconto.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_desconto), 100) : p.Pc_desconto : decimal.Zero).ToString().SoNumero().FormatStringEsquerda(13, '0')); //Filler 193-205 registros.Append(string.Empty.FormatStringDireita(13, '0')); //Valor abatimento 206-218 registros.Append(string.Empty.FormatStringEsquerda(13, '0')); //Tipo pessoa sacado 219-219 registros.Append(p.Sacado.TipoInscricao.Equals(TTipoInscricao.tiPessoaFisica) ? "1" : "2"); //Filler 220-220 registros.Append(string.Empty.FormatStringDireita(1, '0')); //CPF/CNPJ Sacado 221-234 registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); //Nome sacado 235-274 registros.Append(p.Sacado.Nome.Trim().RemoverCaracteres().FormatStringDireita(40, ' ')); //endereco sacado 275-314 registros.Append(p.Sacado.Endereco.Rua.Trim().RemoverCaracteres().FormatStringDireita(40, ' ')); //Codigo sacado na cooperativa cedente 315-319 registros.Append(string.Empty.FormatStringEsquerda(5, '0')); //Filler 320-325 registros.Append(string.Empty.FormatStringEsquerda(6, '0')); //Filler 326-326 registros.Append(string.Empty.FormatStringDireita(1, ' ')); //CEP sacado 327-334 registros.Append(p.Sacado.Endereco.CEP.SoNumero().FormatStringEsquerda(8, '0')); //Codigo sacado junto ao cliente 335-339 registros.Append(string.Empty.FormatStringEsquerda(5, '0')); //CPF/CNPJ avalista 340-353 registros.Append(p.Avalista.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, ' ')); //Nome avalista 354-394 registros.Append(p.Avalista.Nome.Trim().RemoverCaracteres().FormatStringEsquerda(41, ' ')); //sequencial do registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion #region Avalista if (!string.IsNullOrEmpty(p.Avalista.Nome)) { registros = new StringBuilder(); //Identificacao registro 001-001 registros.Append("6"); //Nosso numero 002-016 registros.Append((p.Nosso_numero.SoNumero().FormatStringEsquerda(8, '0') + p.Digito_nossonumero.Trim()).FormatStringDireita(15, ' ')); //Seu numero 017-026 registros.Append((p.Nr_lancto.ToString() + p.Id_cobranca.ToString()).FormatStringEsquerda(10, '0')); //Codigo sacado 027-031 registros.Append(string.Empty.FormatStringEsquerda(5, '0')); //CPF/CNPJ Avalista 032-045 registros.Append(p.Avalista.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0')); //Nome avalista 046-086 registros.Append(p.Avalista.Nome.Trim().RemoverCaracteres().FormatStringDireita(41, ' ')); //Endereco avalista 087-131 registros.Append((p.Avalista.Endereco.Rua.Trim() + "," + p.Avalista.Endereco.Numero.Trim()).RemoverCaracteres().FormatStringDireita(45, ' ')); //Cidade 132-151 registros.Append(p.Avalista.Endereco.Cidade.Trim().RemoverCaracteres().FormatStringDireita(20, ' ')); //CEP 152-159 registros.Append(p.Avalista.Endereco.CEP.SoNumero().FormatStringEsquerda(8, '0')); //Estado 160-161 registros.Append(p.Avalista.Endereco.Estado.Trim().FormatStringDireita(2, ' ')); //Filler 162-394 registros.Append(string.Empty.FormatStringDireita(233, ' ')); //Sequencial registro 395-400 registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); } #endregion }); #endregion #region Trailer registros = new StringBuilder(); //Identificacao registro 001-001 registros.Append("9"); //Identificacao remessa 002-002 registros.Append("1"); //Numero sicredi 003-005 registros.Append("748"); //Codigo cedente 006-010 registros.Append(aCobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(5, '0')); //Filler 011-394 registros.Append(string.Empty.FormatStringDireita(384, ' ')); //Sequencial registro registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0')); Remessa.AppendLine(registros.ToString()); #endregion }
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 }