Ir para conteúdo
  • Cadastre-se

Antonio Gomes

Membros
  • Total de ítens

    670
  • Registro em

  • Última visita

  • Days Won

    1

Tudo que Antonio Gomes postou

  1. interessante, não mexi em nada... vc não estaria enviado isso pelo sicob? Unit "ACBrBancoCaixaSICOB"
  2. @Juliana Tamizou tem como incorporar ao fonte?
  3. então, peguei para testar baseado no que reportou. o nosso numero gerado no seu programa foi dv = 3 ? Segue imagem do boleto
  4. se pensar no contexto de somar da direita para esquerda, está certo... Eu tenho esse banco funcionando, e desse jeito. Qual problema reportaram para vc? Coloca os dados da conta e carteira para testarmos junto.
  5. Não, vc tem que fazer a treta certa, vou passar como faço: TFuncBoleto.ACBrBoleto.DirArqRemessa := ExcludeTrailingPathDelimiter(ADirRemessa); TFuncBoleto.ACBrBoleto.NumeroArquivo := IBDSPai.FieldByName('SEQ_ARQUIVO_BOR').AsLargeInt; TFuncBoleto.ACBrBoleto.NomeArqRemessa := AArqRemessa; AArqRemessa := TFuncBoleto.ACBrBoleto.GerarRemessa(IBDSPai.FieldByName('SEQ_ARQUIVO_BOR').AsLargeInt);
  6. Isso tem que ser salvo no banco, no cadastro da conta corrente, vinculado ao banco, para caso o segundo usuario da rede for gerar, ter o mesmo resultado. Sugestão de ter apenas as pastas iguais nas maquinas.
  7. vc pode enviar o comando especifico, mas geralmente é mais fácil implementar essa alteracao pelo gerenciador do proprio banco. é uma coisa que quase nao se usa dentro do sistema... seu bordero de envio pode fazer alteração também.
  8. Mas altera sem mexer na estrutura do arquivo?
  9. https://www.sicoob.com.br/validador-cnab240-cobranca
  10. voce tem esse manual com a versão solicitada ?
  11. vc está confundindo, o incremento é menor mesmo, o que o siccob pede, é para concatenar mais coisas antes do nosso número. Dai quando vai usar, despreza-se esses dados. A menos que voce grave o o nosso numero com esse monte de coisa que vem no retorno. Um detalhe: No seu programa, como fica o campo nosso número gravado ? apenas a primeira parte? ou nosso numero com DV ? Ex: Gravo tudo separado, para repassar ao componente informação já correta, sem precisar ficar cortando...
  12. Me dá até um aperto no coração quando vejo uma thréd com problema de DV... Vamos lá, passou a pre homologação na planilha fornecida pelo sicoob? Outra coisa, o nosso número do sicoob não suporta tanto numero quanto passou aqui. Como está passando os dados para o componente?
  13. faltou um arquivo ACBrNFSeDANFSeFR.pas
  14. A função de enviar email, está com uma divergencia ao gerar o nome do pdf, com isso, quando pede o envio, acusa que nao existe o pdf. Para tanto, existe como ser corrigido: procedure NotaFiscal.EnviarEmail(sPara, sAssunto: String; sMensagem: TStrings; EnviaPDF: Boolean; sCC: TStrings; Anexos: TStrings; sReplyTo: TStrings; ManterPDFSalvo: Boolean); var NomeArq: String; AnexosEmail:TStrings; StreamNFSe: TMemoryStream; begin if not Assigned(TACBrNFSe(TNotasFiscais(Collection).ACBrNFSe).MAIL) then raise EACBrNFSeException.Create('Componente ACBrMail não associado'); AnexosEmail := TStringList.Create; StreamNFSe := TMemoryStream.Create; try AnexosEmail.Clear; if Assigned(Anexos) then AnexosEmail.Assign(Anexos); with TACBrNFSe(TNotasFiscais(Collection).ACBrNFSe) do begin GravarStream(StreamNFSe); if (EnviaPDF) then begin if Assigned(DANFSE) then begin DANFSE.ImprimirDANFSEPDF(FNFSe); // remover isso //DANFSE.ArquivoPDF // desnecessário //NomeArq := PathWithDelim(DANFSE.PathPDF) + NumID[FNFSe] + '-nfse.pdf'; // desnecessario AnexosEmail.Add(DANFSE.ArquivoPDF); <<<<<<<<<<<< acrescentar desse formato end; end; EnviarEmail( sPara, sAssunto, sMensagem, sCC, AnexosEmail, StreamNFSe, NumID[FNFSe] +'-nfse.xml', sReplyTo);ACBrNFSeDANFSeFR.pas end; finally if not ManterPDFSalvo then DeleteFile(NomeArq); AnexosEmail.Free; StreamNFSe.Free; end; end; E na funcao de gerar o pdf, para fast report: procedure TACBrNFSeDANFSeFR.ImprimirDANFSePDF(NFSe: TNFSe); const TITULO_PDF = 'Nota Fiscal de Serviço Eletrônica'; var I : Integer; NomeArqXML: string; OldShowDialog: Boolean; begin if PrepareReport(NFSe) then begin frxPDFExport.Author := Sistema; frxPDFExport.Creator := Sistema; frxPDFExport.Subject := TITULO_PDF; frxPDFExport.EmbeddedFonts := False; frxPDFExport.Background := False; OldShowDialog := frxPDFExport.ShowDialog; try frxPDFExport.ShowDialog := False; for I := 0 to TACBrNFSe(ACBrNFSe).NotasFiscais.Count - 1 do begin with TACBrNFSe(ACBrNFSe).NotasFiscais.Items do begin NomeArqXML := TACBrNFSe(ACBrNFSe).NumID[TACBrNFSe(ACBrNFSe).NotasFiscais.Items.NFSe]; <<<<<<<<<<<<<<<< acrescentar isso // remover isso { if TACBrNFSe(ACBrNFSe).Configuracoes.Arquivos.NomeLongoNFSe then NomeArqXML := GerarNomeNFSe(UFparaCodigo(NFSe.PrestadorServico.Endereco.UF), NFSe.DataEmissao, NFSe.PrestadorServico.IdentificacaoPrestador.Cnpj, StrToInt64Def(NFSe.Numero,0)) else NomeArqXML := NFSe.Numero + NFSe.IdentificacaoRps.Serie;} end; frxPDFExport.FileName := PathPDF + NomeArqXML + '-nfse.pdf'; // Correção aplicada do nome do arquivo para o envio de e-mail if not DirectoryExists(ExtractFileDir(frxPDFExport.FileName)) then ForceDirectories(ExtractFileDir(frxPDFExport.FileName)); frxReport.Export(frxPDFExport); FPArquivoPDF := frxPDFExport.FileName; end; finally frxPDFExport.ShowDialog := OldShowDialog; end; end; end; Em anexo arquivos modificados. A unit que gera para fortesreport já gera correto, inclusive... ACBrNFSeNotasFiscais.pas
  15. uai até onde sei, isso que tem que ser feito dentro do loop Titulo:=ACBrBoleto1.CriarTituloNaLista; e não precisa de aplicar o insert da variavel "titulo" ela já pertence ao acbrboleto1... pelo menos uso assim.. I :=1; while i <= 3 do begin Titulo:=ACBrBoleto1.CriarTituloNaLista; preenche dados do titulo inc(i); end imprime;...
  16. o nosso número é o mesmo ? note ali no inicio, onde está 001-90 e no outro 001-98 e o final, parece ser um boleto de 140 reais, no segundo o valor nao está igual... falta algo na configuracao que precisa colocar no componente. faça o teste com o mesmo numero de boleto + vencimento + valor, tudo impacta o resultado final.
  17. Ficar atento ao repassar nosso numero para o componente, pois pode haver problema com soma de DV e cortes por posição. Vi que o nosso numero seu está formatado. Atente para isso.
  18. fastreport vi isso acontecer também, só quando gera pdf.
  19. Eu tenho uma treta dessa, tanto que não uso a impressão que tem de boleto que tem no componente, pois deixo o boleto para ser alterado no cliente, é mais uma ideia. Se vc derivar um componente do original, e rescrever a rotina não funciona? mesmo sendo privada.
  20. Tem N opções de resolver isso. Voce pode gravar a chave uma unica vez, e se precisar faz o explode da mesma. O que mencionei antes foi: Evento BeforePost do se dataset: if IBDSPai.FieldByName('NFE_NUM_ALEATORIO_NF').AsInteger = 0 then begin Randomize; IBDSPai.FieldByName('NFE_NUM_ALEATORIO_NF').AsInteger := Random(StrToInt(FormatDateTime('yymmddmm', IBDSPai.FieldByName('DATAEMISSAO_NF').AsDateTime + Time))); end; ou if IBDSPai.FieldByName('NFE_NUM_ALEATORIO_NF').AsInteger = 0 then IBDSPai.FieldByName('NFE_NUM_ALEATORIO_NF').AsInteger := ACBrDFeUtil.GerarCodigoDFe( StrToInt(FormatDateTime('yymmddmm', IBDSPai.FieldByName('DATAEMISSAO_NF').AsDateTime + Time))); depois, ao gerar a chave: Chave := ACBrDFeUtil.GerarChaveAcesso( TFuncoesNFe.UFTocUF(ParametroEmpresa.Cidade.UF_Cid), CDSNf.FieldByName('DATAEMISSAO_NF').AsDateTime, iif(ParametroEmpresa.CNPJ <> '', ParametroEmpresa.CNPJ, ParametroEmpresa.CPF), CDSNf.FieldByName('SERIE_NF').AsInteger, CDSNf.FieldByName('NUMNOTA_NF').AsLargeInt, StrToInt(CDSNf.FieldByName('NFE_TIPO_EMISSAO_NF').AsString), CDSNf.FieldByName('NFE_NUM_ALEATORIO_NF').AsInteger, CDSNf.FieldByName('MODELO_NF').AsInteger);
  21. if CDS_VENDA.FieldByName( 'VEN_A05_ID' ).AsString = '' then CDS_VENDA.FieldByName( 'VEN_A05_ID' ).AsString := GerarChaveAcesso( CDS_VENDA.FieldByName( 'VEN_B02_CUF' ).AsInteger, // Código da UF do emitente do Documento Fiscal //); := GerarChaveAcesso( CDS_VENDA.FieldByName( 'VEN_B02_CUF' ).AsInteger, // Código da UF do emitente do Documento Fiscal //); usa campo do banco: CDS_VENDA.FieldByName( 'VEN_A05_ID' ).AsString
  22. Não deixa a chave gravada no banco e passa trabalhar so com ela? Se não, cria esse campo de numero aleatorio no seu banco e passa usar ele. se mandar gerar a todo momento vai dar problema de duplicidade .
  23. Uma vez que fiz homologação com esse banco, vc tinha que avisar para eles mudarem. Olha só: Etapas da implantação: ✓ Banco envia layouts/dados do atendimento; ✓ Cliente envia arquivos; ✓ Banco faz a análise dos arquivos e orienta na parametrização; ✓ Banco assessora cliente na realização de testes; ✓ Finalização do processo em produção. Lembramos que a utilização do convênio em ambiente de produção deve respeitar o fluxo acima. Atenciosamente, Wander Roberto da Silva Santander - Entrega Eletrônica Telefones - (11) 3135-7600 e (11) 3777 8056 Horário de Atendimento – 09:00 às 18:00 E-mail: [email protected] E-mail: [email protected]
  24. Na verdade, eu salvo esse campo no banco de dados, em outro campo. Por isso aconteceu de eu ter visto o erro. Eu mesmo que gerei o número aleatório. Poderia eu mesmo agora acionar a funcao do acbr de gerar essa chave e manter gravado, assim já passa pela validação. Isso no passado quando eu gerava ela a todo instante, acontecia o que foi reportado la embaixo, de duplicidade, dai o motivo dela ficar salvo na tabela de nota fiscal.. ao gerar simplesmente repasso o campo. Se você puser o not antes, nao vai dar certo, pois tem que entrar para validar, ou simplesmente gerar, a funcao gera se dentro for zero. Aqui: f ACodigo = 0 then ACodigo := GerarCodigoDFe(ANumero);
  25. function GerarChaveAcesso(AUF: Integer; ADataEmissao: TDateTime; const ACNPJ: String; ASerie, ANumero, AtpEmi, ACodigo: Integer; AModelo: Integer): String; var vUF, vDataEmissao, vSerie, vNumero, vCodigo, vModelo, vCNPJ, vtpEmi: String; begin // Se o usuario informar um código maior que zero validar o mesmo // if ACodigo > 0 then if ValidarCodigoDFe(ACodigo, ANumero) then raise EACBrDFeException.Create('Código Numérico inválido, Chave não Gerada'); // Se o usuario informar um código inferior ou igual a -2 a chave não será gerada // if ACodigo <= -2 then raise EACBrDFeException.Create('Código Numérico inválido, Chave não Gerada'); // Se o usuario informar 0 ou -1; o código numerico sera gerado de maneira aleatória // if ACodigo = -1 then ACodigo := 0; if ACodigo = 0 then ACodigo := GerarCodigoDFe(ANumero); // Se o usuario informar -2; o código numerico sera ZERO // // Pela Regra B03-10 que consta na NT 2019/001 versão 1.00 as notas vão ser // rejeitadas se o cNF for igual a zero. // if ACodigo = -2 then // ACodigo := 0; vUF := Poem_Zeros(AUF, 2); vDataEmissao := FormatDateTime('YYMM', ADataEmissao); vCNPJ := PadLeft(OnlyNumber(ACNPJ), 14, '0'); vModelo := Poem_Zeros(AModelo, 2); vSerie := Poem_Zeros(ASerie, 3); vNumero := Poem_Zeros(ANumero, 9); vtpEmi := Poem_Zeros(AtpEmi, 1); vCodigo := Poem_Zeros(ACodigo, 8); Result := vUF + vDataEmissao + vCNPJ + vModelo + vSerie + vNumero + vtpEmi + vCodigo; Result := Result + Modulo11(Result); end; Essa funcao, se eu mando um numero aleatorio = 54251212 está abortando a geracao da chave. penso que teria que que ser : if ACodigo > 0 then if not ValidarCodigoDFe(ACodigo, ANumero) then raise EACBrDFeException.Create('Código Numérico inválido, Chave não Gerada'); Essa funcao está usando em um repeat until, que espera o result true...
×
×
  • 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.