Jump to content

Antonio Gomes

Membros
  • Content Count

    288
  • Joined

  • Last visited

Community Reputation

42 Excellent

1 Follower

About Antonio Gomes

  • Rank
    Membro Ativo

Recent Profile Visitors

338 profile views
  1. Mas altera sem mexer na estrutura do arquivo?
  2. https://www.sicoob.com.br/validador-cnab240-cobranca
  3. voce tem esse manual com a versão solicitada ?
  4. 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...
  5. 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?
  6. faltou um arquivo ACBrNFSeDANFSeFR.pas
  7. 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
  8. 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;...
  9. 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.
  10. 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.
  11. fastreport vi isso acontecer também, só quando gera pdf.
  12. 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.
  13. 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);
  14. 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
  15. 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 .
×
×
  • Create New...