Ir para conteúdo
  • Cadastre-se

Antonio Marcelo

Membros
  • Total de ítens

    20
  • Registro em

  • Última visita

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

Antonio Marcelo's Achievements

Apprentice

Apprentice (3/14)

  • First Post
  • Collaborator Rare
  • Conversation Starter
  • Week One Done
  • One Month Later

Recent Badges

0

Reputação

  1. Prezada Juliana Fiz as alteração, mas acredito que possam não estar convenientes com o projeto me desculpem porque foi uma solução emergencial, vou analisar com mais calma e implementar nos padrões do projeto Da forma como está vai considerar as instruções do trailler Como especificado no layout em anexo: "Primeira instrução codificada: Regras de impressão de mensagens nos boletos: * Primeira instrução (SEQ 34) = 00 e segunda (SEQ 35) = 00, não imprime nada. * Primeira instrução (SEQ 34) = 01 e segunda (SEQ 35) = 01, desconsidera-se as instruções CNAB e imprime as mensagens relatadas no trailler do arquivo. * Primeira e segunda instrução diferente das situações acima, imprimimos o conteúdo CNAB: function TACBrBancoob.GerarRegistroTransacao400(ACBrTitulo :TACBrTitulo): String; .. begin .. with ACBrBoleto do begin .. ATipoAceite + // Identificação FormatDateTime( 'ddmmyy', DataDocumento ) + // 32 Data de Emissão IntToStrZero( 1, 2) + // 33 Primeira instrução (SEQ 34) = 00 e segunda (SEQ 35) = 00, não imprime nada. IntToStrZero( 1, 2) + // 34 Primeira instrução (SEQ 34) = 00 e segunda (SEQ 35) = 00, não imprime nada. IntToStrZero( 0, 6) E também fiz as alterações no rodapé: function TACBrBancoob.GerarRegistroTrailler400( ARemessa: TStringList ): String; var I: Integer; Mensagem: String; begin Result:= UpperCase(Result); for I := 0 to fMensagem.Count - 1 do Mensagem:= Mensagem + padL(fMensagem.Strings[I], 40, ' '); Result:= '9' + // ID Registro Space(193) + // Brancos padL(Copy(Mensagem, 1, length(Mensagem)), 200, ' ') + IntToStrZero( ARemessa.Count + 1, 6); // Contador de Registros Result:= UpperCase(Result); end; O tratamento das mensagens de transação também foi alterada segue o arquivo em anexo. Da forma como estava também precisava ser corrigido if length(MensagemCedente) > 60 then MensagemCedente:= copy(MensagemCedente,1,60); Veja que é carregado 60 posições para a variável MensagemCedente, mas o tamanho do campo é 40 e essa variável não é aproveitada posteriormente. [attachment=0]ACBrBancoob.pas[/attachment] [attachment=1]Layouts para troca de informações.zip[/attachment]
  2. Bom dia Juliana Verificando o Layout do Bancoob pude notar que no arquivo remessa gerado, algumas informações não estão sendo enviadas: CNAB400 :multa, juros e desconto. CNAB240: multa. Por favor me avise se estou equivocado, do contrário vou fazer as alterações necessárias.
  3. Antonio Marcelo

    Layout Bancoob

    Olá, Tive que fazer alguns ajustes na homologação com o Bancoob, segue em anexo arquivo com alterações. ACBrBancoob.pas
  4. Boa tarde Bruno Você alterou apenas o layout? Se você não incluiu nenhum campo novo não precisa mexer no componente. Verifique se o nome do arquivo que você alterou está correto quando passa para o componente na propriedade FastReportFile. Caso não consiga resolver me passa mais detalhes
  5. Para atender essa funcionalidade do Banco do Brasil function TACBrBancoBrasil.GerarRegistroHeader240(NumeroRemessa : Integer): String; var ATipoInscricao,CNPJCIC: string; aAgencia: String; aConta: String; aModalidade: String; begin with ACBrBanco.ACBrBoleto.Cedente do begin case TipoInscricao of pFisica : ATipoInscricao := '1'; pJuridica: ATipoInscricao := '2'; pOutras : ATipoInscricao := '3'; end; CNPJCIC := OnlyNumber(CNPJCPF); aAgencia:= IntToStrZero(StrToIntDef(trim(Agencia),0),5); aConta := IntToStrZero(StrToIntDef(trim(Conta),0),12); aModalidade := IntToStrZero(StrToIntDef(trim(Modalidade),0),3); { GERAR REGISTRO-HEADER DO ARQUIVO } Result:= IntToStrZero(ACBrBanco.Numero, 3) + //1 a 3 - Código do banco '0000' + //4 a 7 - Lote de serviço '0' + //8 - Tipo de registro - Registro header de arquivo padL('', 9, ' ') + //9 a 17 Uso exclusivo FEBRABAN/CNAB ATipoInscricao + //18 - Tipo de inscrição do cedente padR(CNPJCIC, 14, '0') + //19 a 32 -Número de inscrição do cedente padR(Convenio, 9, '0') + '0014' + //33 a 45 - Código do convênio no banco [ Alterado conforme instruções da CSO Brasília ] 27-07-09 ACBrBanco.ACBrBoleto.ListadeBoletos[0].Carteira + //46 a 47 - Carteira [b] IfThen(ACBrBanco.ModoTeste, aModalidade+'TS', aModalidade+' ')+//48 a 52 - Variacao Carteira[/b] aAgencia + //53 a 57 - Código da agência do cedente padL(AgenciaDigito, 1 , '0') + //58 - Dígito da agência do cedente aConta + //59 a 70 - Número da conta do cedente padL(ContaDigito, 1, '0') + //71 - Dígito da conta do cedente ' ' + //72 - Dígito verificador da agência / conta padL(Nome, 30, ' ') + //73 a 102 - Nome do cedente padL('BANCO DO BRASIL', 30, ' ') + //103 a 132 - Nome do banco padL('', 10, ' ') + //133 a 142 - Uso exclusivo FEBRABAN/CNAB '1' + //143 - Código de Remessa (1) / Retorno (2) FormatDateTime('ddmmyyyy', Now) + //144 a 151 - Data do de geração do arquivo FormatDateTime('hhmmss', Now) + //152 a 157 - Hora de geração do arquivo padL(IntToStr(NumeroRemessa), 6, '0') + //158 a 163 - Número seqüencial do arquivo '030' + //164 a 166 - Número da versão do layout do arquivo padL('', 5, '0') + //167 a 171 - Densidade de gravação do arquivo (BPI) padL('', 20, ' ') + // 172 a 191 - Uso reservado do banco padL('', 20, '0') + // 192 a 211 - Uso reservado da empresa padL('', 11, ' ') + // 212 a 222 - 11 brancos 'CSP' + // 223 a 225 - 'CSP' padL('', 3, '0') + // 226 a 228 - Uso exclusivo de Vans padL('', 2, ' ') + // 229 a 230 - Tipo de servico padL('', 10, ' '); //231 a 240 - titulo em carteira de cobranca { GERAR REGISTRO HEADER DO LOTE } Result:= Result + #13#10 + IntToStrZero(ACBrBanco.Numero, 3) + //1 a 3 - Código do banco '0001' + //4 a 7 - Lote de serviço '1' + //8 - Tipo de registro - Registro header de arquivo 'R' + //9 - Tipo de operação: R (Remessa) ou T (Retorno) '01' + //10 a 11 - Tipo de serviço: 01 (Cobrança) '00' + //12 a 13 - Forma de lançamento: preencher com ZEROS no caso de cobrança '020' + //14 a 16 - Número da versão do layout do lote ' ' + //17 - Uso exclusivo FEBRABAN/CNAB ATipoInscricao + //18 - Tipo de inscrição do cedente padR(CNPJCIC, 15, '0') + //19 a 32 -Número de inscrição do cedente padR(Convenio, 9, '0') + '0014' + //33 a 45 - Código do convênio no banco [ Alterado conforme instruções da CSO Brasília ] 27-07-09 ACBrBanco.ACBrBoleto.ListadeBoletos[0].Carteira + //46 a 47 - Carteira aModalidade+' ' + //48 a 52 - Variacao Carteira aAgencia + //53 a 57 - Código da agência do cedente padL(AgenciaDigito, 1 , '0') + //58 - Dígito da agência do cedente aConta + //59 a 70 - Número da conta do cedente padL(ContaDigito, 1, '0') + //71 - Dígito da conta do cedente ' ' + //72 - Dígito verificador da agência / conta padL(Nome, 30, ' ') + //73 a 102 - Nome do cedente padL('', 40, ' ') + //104 a 143 - Mensagem 1 para todos os boletos do lote padL('', 40, ' ') + //144 a 183 - Mensagem 2 para todos os boletos do lote padL(IntToStr(NumeroRemessa), 8, '0') + //184 a 191 - Número do arquivo FormatDateTime('ddmmyyyy', Now) + //192 a 199 - Data de geração do arquivo padL('', 8, '0') + //200 a 207 - Data do crédito - Só para arquivo retorno padL('', 33, ' '); //208 a 240 - Uso exclusivo FEBRABAN/CNAB end; end;
  6. Correção nos arquivos ACBrBancoBrasil.pas ACBrBoleto.pas
  7. Antonio Marcelo

    Modo Teste

    Adicionei a property ModoTeste na classe TACBrBanco, precisei para o Banco do Brasil Seguem os arquivos em anexo ACBrBancoBrasil.pas ACBrBoleto.pas
  8. Antonio Marcelo

    Layout boleto

    Fiz algumas modificações no arquivo BoletoFR.fr3, adicionando o endereço do cedente e a linha digitável no recibo do sacado. Na homologação do banco do Brasil me pediram isso. Segue em anexo BoletoFR.zip
  9. procedure TfrmRetorno.act_CarregaArquivoExecute(Sender: TObject); var I: Integer; Titulo: TACBrTitulo; begin If not OpenDialog1.Execute Then Exit; try ACBrBoleto1.LeCedenteRetorno:= True; ACBrBoleto1.NomeArqRetorno:= OpenDialog1.FileName; //Nesse momento você carrega os titulos ACBrBoleto1.LerRetorno; for I := 0 to DM_Cliente.ACBrBoleto1.ListadeBoletos.Count - 1 do begin Titulo:= ACBrBoleto1.ListadeBoletos.Objects[I]; //Agora é só usar as property do objeto NumDocto := Titulo.NumeroDocumento; Vencimento:= Titulo.Vencimento; Etc... end; end; Espero ter ajudado
  10. Dá uma olhada nesses arquivos que o duilio postou isso já foi resolvido. download/file.php?id=957
  11. Bom dia duilio, aproveitando que você postou sua unit, se o pessoal também quiser verificar e adicionar ao svn function TACBrBancoBrasil.CodMotivoRejeicaoToDescricao( const TipoOcorrencia: TACBrTipoOcorrencia; CodMotivo: Integer): String; begin case TipoOcorrencia of toRetornoRegistroRecusado: case CodMotivo of 01: Result:='01-Identificação inválida' ; 02: Result:='02-Variação da carteira inválida' ; 03: Result:='03-Valor dos juros por um dia inválido' ; 04: Result:='04-Valor do desconto inválido' ; 05: Result:='05-Espécie de título inválida para carteira' ; 06: Result:='06-Espécie de valor variável inválido' ; 07: Result:='07-Prefixo da agência usuária inválido' ; 08: Result:='08-Valor do título/apólice inválido' ; 09: Result:='09-Data de vencimento inválida' ; 10: Result:='10-Fora do prazo' ; 11: Result:='11-Inexistência de margem para desconto' ; 12: Result:='12-O Banco não tem agência na praça do sacado' ; 13: Result:='13-Razões cadastrais' ; 14: Result:='14-Sacado interligado com o sacador' ; 15: Result:='15-Título sacado contra orgão do Poder Público' ; 16: Result:='16-Título preenchido de forma irregular' ; 17: Result:='17-Título rasurado' ; 18: Result:='18-Endereço do sacado não localizado ou incompleto' ; 19: Result:='19-Código do cedente inválido' ; 20: Result:='20-Nome/endereco do cliente não informado /ECT/' ; 21: Result:='21-Carteira inválida' ; 22: Result:='22Quantidade de valor variável inválida' ; 23: Result:='23-Faixa nosso número excedida' ; 24: Result:='24-Valor do abatimento inválido' ; 25: Result:='25-Novo número do título dado pelo cedente inválido' ; 26: Result:='26-Valor do IOF de seguro inválido' ; 27: Result:='27-Nome do sacado/cedente inválido ou não informado' ; 28: Result:='28-Data do novo vencimento inválida' ; 29: Result:='29-Endereco não informado' ; 30: Result:='30-Registro de título já liquidado' ; 31: Result:='31-Numero do bordero inválido' ; 32: Result:='32-Nome da pessoa autorizada inválido' ; 33: Result:='33-Nosso número já existente' ; 34: Result:='34-Numero da prestação do contrato inválido' ; 35: Result:='35-Percentual de desconto inválido' ; 36: Result:='36-Dias para fichamento de protesto inválido' ; 37: Result:='37-Data de emissão do título inválida' ; 38: Result:='38-Data do vencimento anterior a data da emissão do título' ; 39: Result:='39-Comando de alteração indevido para a carteira' ; 40: Result:='40-Tipo de moeda inválido' ; 41: Result:='41-Abatimento não permitido' ; 42: Result:='42-CEP do sacado inválido /ECT/' ; 43: Result:='43-Codigo de unidade variavel incompativel com a data emissão do título' ; 44: Result:='44-Dados para debito ao sacado inválidos' ; 45: Result:='45-Carteira' ; 46: Result:='46-Convenio encerrado' ; 47: Result:='47-Título tem valor diverso do informado' ; 48: Result:='48-Motivo de baixa inválido para a carteira' ; 49: Result:='49-Abatimento a cancelar não consta do título' ; 50: Result:='50-Comando incompativel com a carteira' ; 51: Result:='51-Codigo do convenente inválido' ; 52: Result:='52-Abatimento igual ou maior que o valor do título' ; 53: Result:='53-Título já se encontra situação pretendida' ; 54: Result:='54-Título fora do prazo admitido para a conta 1' ; 55: Result:='55-Novo vencimento fora dos limites da carteira' ; 56: Result:='56-Título não pertence ao convenente' ; 57: Result:='57-Variação incompativel com a carteira' ; 58: Result:='58-Impossivel a transferencia para a carteira indicada' ; 59: Result:='59-Título vencido em transferencia para a carteira 51' ; 60: Result:='60-Título com prazo superior a 179 dias em transferencia para carteira 51' ; 61: Result:='61-Título já foi fichado para protesto' ; 62: Result:='62-Alteração da situação de debito inválida para o codigo de responsabilidade' ; 63: Result:='63-DV do nosso número inválido' ; 64: Result:='64-Título não passivel de debito/baixa - situação anormal' ; 65: Result:='65-Título com ordem de não protestar-não pode ser encaminhado a cartorio' ; 67: Result:='66-Título/carne rejeitado' ; 80: Result:='80-Nosso número inválido' ; 81: Result:='81-Data para concessão do desconto inválida' ; 82: Result:='82-CEP do sacado inválido' ; 83: Result:='83-Carteira/variação não localizada no cedente' ; 84: Result:='84-Título não localizado na existencia' ; 99: Result:='99-Outros motivos' ; end; end; end; procedure TACBrBancoBrasil.LerRetorno400(ARetorno: TStringList); var Titulo : TACBrTitulo; ContLinha, CodOcorrencia, CodMotivo, i, MotivoLinha : Integer; CodMotivo_19, rAgencia, rDigitoAgencia, rConta, rDigitoConta, Linha, rCedente, rCNPJCPF:String; begin ContLinha := 0; if StrToIntDef(copy(ARetorno.Strings[0],77,3),-1) <> Numero then raise Exception.Create(ACBrStr(ACBrBanco.ACBrBoleto.NomeArqRetorno + 'não é um arquivo de retorno do '+ Nome)); rCedente := trim(Copy(ARetorno[0],47,30)); rAgencia := trim(Copy(ARetorno[1],18,4)); rDigitoAgencia:= Copy(ARetorno[1],22,1); rConta := trim(Copy(ARetorno[1],23,8)); rDigitoConta := Copy(ARetorno[1],31,1); ACBrBanco.ACBrBoleto.NumeroArquivo := StrToIntDef(Copy(ARetorno[0],101,7),0); ACBrBanco.ACBrBoleto.DataArquivo := StringToDateTimeDef(Copy(ARetorno[0],95,2)+'/'+ Copy(ARetorno[0],97,2)+'/'+ Copy(ARetorno[0],99,2),0, 'DD/MM/YY' ); case StrToIntDef(Copy(ARetorno[1],2,2),0) of 11: rCNPJCPF := Copy(ARetorno[1],7,11); 14: rCNPJCPF := Copy(ARetorno[1],4,14); else rCNPJCPF := Copy(ARetorno[1],4,14); end; with ACBrBanco.ACBrBoleto do begin if (not LeCedenteRetorno) and ((rAgencia <> OnlyNumber(Cedente.Agencia)) or (rConta <> OnlyNumber(Cedente.Conta))) then raise Exception.Create(ACBrStr('Agencia\Conta do arquivo inválido')); Cedente.Nome := rCedente; If Copy(rCNPJCPF,1,10) <> '0000000000' Then Cedente.CNPJCPF := rCNPJCPF; Cedente.Agencia := rAgencia; Cedente.AgenciaDigito:= rDigitoAgencia; Cedente.Conta := rConta; Cedente.ContaDigito := rDigitoConta; case StrToIntDef(Copy(ARetorno[1],2,2),0) of 11: Cedente.TipoInscricao:= pFisica; 14: Cedente.TipoInscricao:= pJuridica; else Cedente.TipoInscricao := pOutras; end; ACBrBanco.ACBrBoleto.ListadeBoletos.Clear; end; ACBrBanco.TamanhoMaximoNossoNum := 20; for ContLinha := 1 to ARetorno.Count - 2 do begin Linha := ARetorno[ContLinha] ; if Copy(Linha,1,1)<> '7' then Continue; Titulo := ACBrBanco.ACBrBoleto.CriarTituloNaLista; with Titulo do begin SeuNumero := copy(Linha,39,25); NumeroDocumento := copy(Linha,117,10); OcorrenciaOriginal.Tipo := CodOcorrenciaToTipo(StrToIntDef( copy(Linha,109,2),0)); CodOcorrencia := StrToInt(IfThen(copy(Linha,109,2) = '00','00',copy(Linha,109,2))); if(CodOcorrencia = 3)then begin CodMotivo:= StrToInt(IfThen(copy(Linha,MotivoLinha,2) = '00','00',copy(Linha,87,2))); MotivoRejeicaoComando.Add(copy(Linha,87,2)); DescricaoMotivoRejeicaoComando.Add(CodMotivoRejeicaoToDescricao(OcorrenciaOriginal.Tipo,CodMotivo)); end; DataOcorrencia := StringToDateTimeDef( Copy(Linha,111,2)+'/'+ Copy(Linha,113,2)+'/'+ Copy(Linha,115,2),0, 'DD/MM/YY' ); Vencimento := StringToDateTimeDef( Copy(Linha,147,2)+'/'+ Copy(Linha,149,2)+'/'+ Copy(Linha,151,2),0, 'DD/MM/YY' ); ValorDocumento := StrToFloatDef(Copy(Linha,153,13),0)/100; ValorIOF := StrToFloatDef(Copy(Linha,215,13),0)/100; ValorAbatimento := StrToFloatDef(Copy(Linha,228,13),0)/100; ValorDesconto := StrToFloatDef(Copy(Linha,241,13),0)/100; ValorRecebido := StrToFloatDef(Copy(Linha,254,13),0)/100; ValorMoraJuros := StrToFloatDef(Copy(Linha,267,13),0)/100; ValorOutrosCreditos := StrToFloatDef(Copy(Linha,280,13),0)/100; NossoNumero := Copy(Linha,64,17); Carteira := Copy(Linha,92,3); // ValorDespesaCobranca := StrToFloatDef(Copy(Linha,176,13),0)/100; ValorOutrasDespesas := StrToFloatDef(Copy(Linha,189,13),0)/100; if StrToIntDef(Copy(Linha,296,6),0) <> 0 then DataCredito:= StringToDateTimeDef( Copy(Linha,176,2)+'/'+ Copy(Linha,178,2)+'/'+ Copy(Linha,180,2),0, 'DD/MM/YY' ); end; end; ACBrBanco.TamanhoMaximoNossoNum := 10; end;
  12. Obrigado duiliolobianco suas alterações me ajudaram muito. Se tiver novas implementações, e puder disponibilizar fico muito agradecido.
  13. Pessoal a segundo resposta enviada pela Equipe de Testes de Layout Banco do Brasil o Layout disponível no site está errado.
  14. Pessoal um email para a Equipe de Testes de Layout do Banco do Brasil referente a dúvida do poste anterior Assim que tiver a resposta posto aqui.
  15. Provisóriamente alterei assim: padL( trim(Sacado.Logradouro)+', '+trim(Sacado.Numero), 40) +// Endereço do sacado padL( trim(Sacado.Bairro), 12) +// Bairro do sacado Se estiver fazendo algo errado ou se alguém já resolveu isso sem ter que alterar os fontes com componente, favor informar. Obrigado
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...