-
Total de ítens
129 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que Joel postou
-
Boa noite senhores, na remessa layout CNAB240 , detectei algo para melhorar. Na verdade só estava aceitando codigomora por valor dia. Arquivo: AcbrBancoCaixa.pas Linha 593 // IfThen(ValorMoraJuros > 0, '1', '3') + //118 - Código de juros de mora: Valor por dia // alterado por joel takei 02/08/2017 utilizar campo correto codigomora alterei para CodigoMora + //118 - Código de juros de mora: (1=Valor Diario / 2=Percentual Mensal / 3=Isento) Por favor se puderem subir a minha correção agradeço! Em anexo arquivo .pas. ACBrBancoCaixa.pas
-
Entendi. Mas no meu caso não pode ser, o primeiro componente que testei foi o acbr, claro que tive que ir instalando alguns componentes como o fast para poder instalar. Ainda aposto na dúvida sobre o path do delhi que você comentou que é enorme mesmo, lembro que do delphi 7 não era tão grande. Infelizmente é aquilo, toda vez que vem atualização é no braço =/ . Mas não é nenhum trabalho em vista do grande benefício do componente.
-
Juliomar, eu também tive este problema recente com a instalação. utilizo xe10. Para ter uma ideia formatei meu note para fazer a instalação limpa. deixei apenas uma pasta do acbr, e o caminho para a pasta não era grande. Uma coisa apenas que não modifiquei foi o caminho padrão da instalação do delphi. Só se for isso porque o resto fiz de tudo conforme as dicas que estavam no post, mas mesmo assim da o mesmo erro do nosso parceiro do path. Eu queria abrir o fonte do instalador para tentar mudar algo mas como não quero instalar o Jedi, não consegui abrir o fonte. O que será que acontece ne. Meu windows é 7 professional service pack 1. a pasta dos componentes fica no drive D e a instalação do delphi fica no C. Deixo sempre assim pois ao formatar mantenho o drive D. Numa outra tentativa em outro momento tentarei mudar o caminho do delphi para ver. foi o que restou de diferente, o delplhi 7 não tinha um caminho tão grande.
-
Boleto Sicoob Acbrboleto NOVA CLASSE BANCOOB TACBrBancoob
Joel replied to dtybel's tópico in ACBrBoleto
Bom dia Juliana! Entendi. Sem problemas, vou deixar apenas no meu fonte. Infelizmente acho que não há outra sugestão pois na verdade não há necessidade de calculo para este campo. Apenas atentem-se nas "instruções" quando o codigo da mora é 2 (percentual) ou 1 (reais) deve aparecer por dia ou por mês e o componente não está respeitando estes casos deixando tudo como dia. Grande abraço -
Boleto Sicoob Acbrboleto NOVA CLASSE BANCOOB TACBrBancoob
Joel replied to dtybel's tópico in ACBrBoleto
Jovem, me desculpe mas a sua pergunta foi bem coerente com o meu assunto não é mesmo? " Onde diz isso no manual? " .... que ajuda bacana hein. "Vamos ver... ahh no manual não consta também que é para dividir por 30 o valor que vai para o arquivo, não é estranho?... pergunto a você agora ... onde diz no manual para fazer assim?" Já que você quer analisar o manual para discutirmos uma situação de programação... nada a ver.... mas deixa para lá amigo. Só quis ajudar. Grade abraço! -
Boleto Sicoob Acbrboleto NOVA CLASSE BANCOOB TACBrBancoob
Joel replied to dtybel's tópico in ACBrBoleto
Boa tarde Juliana, Na verdade é o inverso, hoje da forma que está é que tem que se fazer um tratamento para enviar para o componente. preciso dividir por 30 pois ele depois multiplica, no caso do CNAB400 apenas. No CNAB240 não tem que fazer nada pois o valor que o usuário digitar é o que vai para o boleto seja % seja valor. Mas Juliana você viu o problema que acontece? O 10,00 se transforma em 9,99 ? Fui homologar no SICOOB o CNAB400 e o CNAB240 e me deparei com este detalhe no fonte. Vamos deixar assim mesmo? É um bug e como todo bug acredito que deveria ser corrigido ou carregaremos ele para sempre. O pessoal teve que adaptar seu fonte para poder homologar. Quem homologar CNAB400 e testar enviar juros de 10% ou 10,00 reais terá este problema. Terá que dividir por 30 antes de enviar para o componente mas ai para o arquivo aparecerá 9,99. Não deveria ter calculo para este campo, apenas formatação. -
Boleto Sicoob Acbrboleto NOVA CLASSE BANCOOB TACBrBancoob
Joel replied to dtybel's tópico in ACBrBoleto
Se você leu o que eu expliquei Juliomar, deveria me perguntar por que chegamos a essa conclusão e não onde diz isso no manual não acha? Apesar da sua grosseria Juliomar, não sei o motivo e também não me interessa, vou explicar porque não precisa essa multiplicação por 30. Se o usuário tem uma conta banco que trabalha com o CNAB400, ele pode colocar no campo de configuração da conta no sistema: 10% por exemplo ou R$ 10,00. Ele tem que saber que o CNAB400 a informação é apenas MENSAL conforme parte do manual que segue em anexo. Sendo assim o calculo a baixo resolve sem a multiplicação por 30. IntToStrZero( Round( ValorMoraJuros *10000 ), 6) Hoje como está, você precisa colocar no campo o valor do juros dia, tanto em reais como em valor. no caso dos 10% ou 10,00 reais. Temos que colocar 10 / 30 = 0,33.Se o programador quiser camuflar isso para o usuário colocar o valor mensal, podemos dividi-lo por 30 dentro do codigo antes de envia-lo ao componente devido ao calculo que ele faz multiplicando por 30 para chegar no valor mensal para cumprir o layout. Enviando 0,33 para o componente, ele multiplica por 30 certo? IntToStrZero( Round( (ValorMoraJuros * 30) *10000 ), 6) , o valor fica 9,99% ou R$ 9,99 reais. Eu entendi o motivo de padronizar com valor diário, devido o layout do CNAB240 do BANCOOB, mas não é necessário fazer isso. E se o usuário em outra conta ele utilizar CNAB240, não tem problema nenhum em colocar o valor tanto em % ou R$, apensa tem que saber que no CNAB240 se for em percentual é mensal se for em valor é diário, conforme parte do layout do CNAB240 que segue em anexo. O calculo por 30 acaba afetando o valor do juros, sem necessidade do mesmo pois a multiplicação por 10000 já resolve a formatação. -
Boleto Sicoob Acbrboleto NOVA CLASSE BANCOOB TACBrBancoob
Joel replied to dtybel's tópico in ACBrBoleto
Boa tarde pessoal. Na unit ACBrBancoBancoob, função GerarRegistroTransacao400 campo de valor juros não há necessidade da multiplicação por 30. IntToStrZero( Round( (ValorMoraJuros * 30) *10000 ), 6) + // Taxa de mora mês // alterado por joel takei 10/01/2017 tirado multiplicacao por 30 ficando: IntToStrZero( Round( ValorMoraJuros *10000 ), 6) Segue em anexo unit para atualização. ACBrBancoBancoob.pas -
Olá pessoal, analisando o CNAB240, encontrei um detalhe nas mensagens padrões quando o CodigoMora for 2 no caso (%) e 1 no caso (R$). Vou tentar explicar: JUROS: Quando o codigoMora for 2 (percentual), a mensagem deve colocar tudo em percentual. E teste caso, deve ser colocado por mês e não por dia. MORA: Quando o codigoMora for 2 (percentual), colocar em percentual e quando for 1, colocar em valor. if ValorMoraJuros <> 0 then begin if DataMoraJuros <> 0 then AStringList.Add(ACBrStr('Cobrar juros de ' + ifthen(CodigoMora = '2', FloatToStr(ValorMoraJuros) + '%', FormatCurr('R$ #,##0.00',ValorMoraJuros)) + ifthen(CodigoMora = '2', ' por mês de atraso para pagamento a partir de ', ' por dia de atraso para pagamento a partir de ') + FormatDateTime('dd/mm/yyyy',ifthen(Vencimento = DataMoraJuros, IncDay(DataMoraJuros,1), DataMoraJuros)))) else AStringList.Add(ACBrStr('Cobrar juros de ' + ifthen(CodigoMora = '2', FloatToStr(ValorMoraJuros) + '%', FormatCurr('R$ #,##0.00',ValorMoraJuros)) + ifthen(CodigoMora = '2', ' por mês de atraso', ' por dia de atraso'))); end; if PercentualMulta <> 0 then begin if DataMoraJuros <> 0 then AStringList.Add(ACBrStr('Cobrar Multa de ' + FormatCurr(ifthen(CodigoMora = '2','#,##0.00 %', 'R$ #,##0.00'), IfThen(MultaValorFixo, PercentualMulta, ValorDocumento*( 1+ PercentualMulta/100)-ValorDocumento)) + ' a partir '+FormatDateTime('dd/mm/yyyy',ifthen(Vencimento = DataMoraJuros, IncDay(DataMoraJuros,1),DataMoraJuros)))) else AStringList.Add(ACBrStr('Cobrar Multa de ' + FormatCurr(ifthen(CodigoMora = '2','#,##0.00 %', 'R$ #,##0.00'), IfThen(MultaValorFixo, PercentualMulta, ValorDocumento*( 1+ PercentualMulta/100)-ValorDocumento)) + ' após o vencimento.')); end; ACBrBoleto.pas
-
Bom dia pessoal, a tempos não tenho problemas com o componente, muito estável, parabéns a todos do ACBR. Eu peguei este erro no cliente : vFCPUFDest is unexpected according to content model ....... na função: GerarTotalICMSTotal Precisei alterar a linha: Gerador.wCampo(tcDe2, 'W04c', 'vFCPUFDest ', 01, 15, 0, nfe.Total.ICMSTot.vFCPUFDest, DSC_VICMS); // alterado por joel 20/10/2016 (não enviar as tags caso esteja zerado) Poderiam subir meu fonte por gentileza. Obrigado! pcnNFeW.pas
-
Boa tarde italo, entendi. Farei isso e vou pegar o ini do provedor. Obrigado
-
na unit ACBrNFSeWebServices provedor de maringá PR ISSe Não sei se é configuração, mas nesta funçao DefinirDadosMsg Mesmo setando fixo no componente true não entra neste if, e por fim não assinando o xml no envio do cancelamento e dando o erro: The documento has no document element if (FPConfiguracoesNFSe.Geral.ConfigAssinar.Cancelar) and (FPDadosMsg <> '') then Por enquanto retirei esta validação para que os clientes possam cancelar. if (FPDadosMsg <> '') then
-
Italo, resolvido! porém parece que está abrindo 2 vezes o preview do impresso ao chamar a função ACBrNFSe1.NotasFiscais.Imprimir; Estou utilizando o componente ACBrNFSeDANFSeRL1 para impressão. Será uma configuração minha ? em tempo: só está ocorrendo nas notas canceladas, acho que a correção afetou algo.
-
ok obrigado italo.
-
Bom dia italo, ok. A esqueci de dizer. Maringá - PR provedor ISSE. 4719-nfse.xml
-
Pessoal na unit ACBrNFSeNotasFiscais que faz a leitura do XML da nfse não está lendo a tag de cancelamento no caso a função TNotasFiscais.LoadFromString O que acontece é que ai não funciona a impressão da tarja de aviso nota cancelada na unit ACBrNFSeDANFSeRLRetrato; if NfseCancelamento.DataHora<>0 then begin rllMsgTeste.Caption := 'NFS-e CANCELADA'; rllMsgTeste.Visible := True; rllMsgTeste.Enabled := True; end; Para um paleativo fiz isso no sistema: IF qaux.fieldbyname('status').AsString = 'C' then ACBrNFSe1.NotasFiscais.Items[0].NFSe.NfseCancelamento.DataHora := 1;
-
Entendi Juliana, perfeito! Obrigado e grande abraço!
-
Justamente isso Juliana. Fiz o update para comparar as alterações e o código nessa alteração não está assim: Result := sLineBreak + '2'+ // IDENTIFICAÇÃO DO LAYOUT PARA O REGISTRO Copy(PadRight(Mensagem[0], 80, ' '), 1, 80); // CONTEÚDO DA 1ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO if Mensagem.Count > 1 then Result := Result + Copy(PadRight(Mensagem[1], 80, ' '), 1, 80) // CONTEÚDO DA 2ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS if Mensagem.Count > 2 then Result := Result + Copy(PadRight(Mensagem[2], 80, ' '), 1, 80) // CONTEÚDO DA 3ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS if Mensagem.Count > 3 then Result := Result + Copy(PadRight(Mensagem[3], 80, ' '), 1, 80) // CONTEÚDO DA 4ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS está assim: Result := sLineBreak + '2' + // IDENTIFICAÇÃO DO LAYOUT PARA O REGISTRO Copy(PadRight(Mensagem[1], 80, ' '), 1, 80); // CONTEÚDO DA 1ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO if Mensagem.Count > 2 then ??????? Result := Result + Copy(PadRight(Mensagem[2], 80, ' '), 1, 80) // CONTEÚDO DA 2ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS if Mensagem.Count > 3 then ?????????? Result := Result + Copy(PadRight(Mensagem[3], 80, ' '), 1, 80) // CONTEÚDO DA 3ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS if Mensagem.Count > 4 then ???????? Result := Result + Copy(PadRight(Mensagem[4], 80, ' '), 1, 80) // CONTEÚDO DA 4ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS
-
Boa tarde, o trunck2 ainda não está com as alterações realizadas acima, poderia me passar o motivo? Se foi ajustado em outro local ou como foi corrigido ? Estou utilizando em tempo de produção e não posso atualizar pois o trunck2 não foi corrigido, por gentileza corrigir o mesmo.
-
boa tarde pessoal. Poderiam deixar a geração da tag vICMSDeson e vFCPUFDest como as demais opcional, só gerar as tags se tiver o valor? Pois ainda não estou enviando estas informações e se envio as tags está dando problema em meu provedor. Maringá-PR provedor isse. unit pcnNFeW função: GerarTotalICMSTotal; if NFe.infNFe.Versao >= 3.10 then begin Gerador.wCampo(tcDe2, 'W04a', 'vICMSDeson ', 01, 15, 0, nfe.Total.ICMSTot.vICMSDeson, DSC_VICMSDESON); Gerador.wCampo(tcDe2, 'W04c', 'vFCPUFDest ', 01, 15, 0, nfe.Total.ICMSTot.vFCPUFDest, DSC_VICMS); Gerador.wCampo(tcDe2, 'W04e', 'vICMSUFDest ', 01, 15, 0, nfe.Total.ICMSTot.vICMSUFDest, DSC_VICMS); Gerador.wCampo(tcDe2, 'W04g', 'vICMSUFRemet', 01, 15, 0, nfe.Total.ICMSTot.vICMSUFRemet, DSC_VICMS); end; pcnNFeW.pas
- 361 replies
-
- nt 2015.002
- nt 2015.003
- (e 1 mais)
-
alteração unit ACBrBancoBradescoSICOOB na função GerarRegistroTransacao400 As instruções não estavam indo corretamente para a remessa. // alteração joel takei 12/01/2016 Result := sLineBreak + '2'+ // IDENTIFICAÇÃO DO LAYOUT PARA O REGISTRO Copy(PadRight(Mensagem[0], 80, ' '), 1, 80); // CONTEÚDO DA 1ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO if Mensagem.Count > 1 then Result := Result + Copy(PadRight(Mensagem[1], 80, ' '), 1, 80) // CONTEÚDO DA 2ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS if Mensagem.Count > 2 then Result := Result + Copy(PadRight(Mensagem[2], 80, ' '), 1, 80) // CONTEÚDO DA 3ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS if Mensagem.Count > 3 then Result := Result + Copy(PadRight(Mensagem[3], 80, ' '), 1, 80) // CONTEÚDO DA 4ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS ACBrBancoBradescoSICOOB.pas
-
São os dados do correspondente Elvis.
-
Sim, tanto que utilizo na minha empresa para fazer a baixa automatica. Algum problema Elviz?
-
Bom dia Elvis, entendi. é foi o que imaginei hehe, pois não tinha como passar daquela forma. Essas duas funções que você modificou, se não me engano eu já havia enviado esta correção, mas está joia, conferi o fonte aqui e está da foma que você passou ai.
-
Boa tarde , favor atualizar o trunck2 com as modificações comentadas a cima: CalcularDigitoVerificador if Modulo.ModuloFinal = 1 then // antes 11 Result:= 'P' else Result:= IntToStr(Modulo.DigitoFinal); Elviz, você homologou o boleto e remessa com essa função configurada assim? CalcularTamMaximoNossoNumero( ACBrBanco.TamanhoMaximoNossoNum + 5; Seu nossonumero está saindo corretamente com 12 digitos assim 167700033710 ? Porque o meu se eu deixar essa configuração de + 5 ele está gerando assim: 16770000000033710 Agora não entendi como se meu fonte está atualizadissimo até os minutos rs. Alguém poderia explicar esse empasse? Eu já estou gerando boletos para minha empresa são mais de 100 boletos gerados com essa configuração a baixo que terei que manter pois estou atualizado no trunck2. CalcularTamMaximoNossoNumero( Result := ACBrBanco.TamanhoMaximoNossoNum; //+ 5; Outra modificação : Com certeza tem a ver com a linha acima, mas resolveu fazendo isto. Procedure TACBrBancoBradescoSICOOB.LerRetorno400 ( ARetorno: TStringList ); NossoNumero := Copy(Linha,76,6); // Copy(Linha,71, 12); alterado por joel takei 08/01/2016 Quando alimentamos o componente com os dados do titulo seja para gerar boleto ou para remessa, o campo nosso número é alimentando apenas pelo número do documento, código interno do sistema, no meu caso o código do meu contas a receber. O componente faz a implementação do restante do nosso número concatenando o ano + convênio ao gerar o titulo, perfeito! Baseado nisso, tem lógica passarmos na leitura do retorno somente o código interno que no caso é o numero do documento que é justamente os últimos 6 dígitos do nosso numero. Copy(Linha,76,6) e não os Copy(Linha,71, 12) nosso número completo. ACBrBancoBradescoSICOOB.pas