-
Total de ítens
684 -
Registro em
-
Última visita
-
Days Won
1
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que Antonio Gomes postou
-
faltou um arquivo ACBrNFSeDANFSeFR.pas
-
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
-
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;...
-
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.
-
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.
- 8 replies
-
- 1
-
-
- linha digitável
- sicoob
- (e 1 mais)
-
fastreport vi isso acontecer também, só quando gera pdf.
-
Métodos públicos para criação de ClassHelpers
Antonio Gomes replied to everson.turossi's tópico in ACBrBoleto
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. -
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);
-
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
-
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 .
-
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]
-
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);
-
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...
-
se vc olhar o codigo fonte hoje, vai ver que nele está com o DV, no manual pede com ou sem ? Detalhe: está atualizado seu componente ? cnab240 que olhei ...
-
pediram para nao mandar na remessa ou na impressao ? Acredito que vc esteja passando somando isso ao componente não ?
- 6 replies
-
- banco safra
- nosso número
-
(e 1 mais)
Tags:
-
Não tenho.
-
os numeros no campo livre tem os dados do contribuinte não ? Pelo que notei, existem guias que tem que colocar o cnpj/ cpf, nire...
-
alteração Retonro Banco Sicoob CNAB 240
Antonio Gomes replied to Fernando Rodrigo's tópico in ACBrBoleto
Qual versao do seu manual que usou? tem como mandar ele aqui ? -
vc digitou isso onde? Não vi erro, mas tive que imprimir no modo compactado para conseguir ler o codigo de barras, depois fiz a leitura pelo banco itau.
-
Olhando o arquivo de impressão, a barra não deveria ocupar uma parte expressiva da pagina, que seria pouco mais da metade da página? O leitor conseguiu ler essa barra?
-
Banco Sicoob 756 - Problema na geração do arquivo de remessa
Antonio Gomes replied to AndreiTS's tópico in ACBrBoleto
vc preenche a propriedade fora dai, nao precisa mexer no codigo fonte. Assim: Cedente.Conta := ADataSetConfigServicoBanco.FieldByName('CONTA_CCR').AsString; Cedente.ContaDigito := ADataSetConfigServicoBanco.FieldByName('DV_CONTA_CCR').AsString; Cedente.Agencia := ADataSetConfigServicoBanco.FieldByName('AGENCIA_CCR').AsString; Cedente.AgenciaDigito := ADataSetConfigServicoBanco.FieldByName('DV_AGENCIA_CCR').AsString; Cedente.Modalidade := Trim(ADataSetConfigServicoBanco.FieldByName('MODALIDADE_SER').AsString); Cedente.DigitoVerificadorAgenciaConta := ADataSetConfigServicoBanco.FieldByName('DV_AGENCIA_CONTA_CCR').AsString; Sugestão: Cria o campo e deixa seu usuario preencher. -
http://wiki.biserp.com.br/index.php/Especificação_de_Guias_e_Boletos
-
Qual problema está ocorrendo ?
-
alem de ser cada um do seu jeito, ainda tem coisa no xml que ao meu ver poderia ser mais simplificado, caixa mesmo é um caso.