-
Total de ítens
691 -
Registro em
-
Última visita
-
Days Won
1
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que Antonio Gomes postou
-
Ao debugar, identifiquei o problema no procedimento abaixo, olhe o trecho em vermelho. Segue trecho e código fonte alterado procedure NotaFiscal.Assinar(Assina: Boolean); var XMLStr: String; XMLUTF8: AnsiString; Leitor: TLeitor; CNPJEmitente, CNPJCertificado: String; begin // VErificando se pode assinar esse XML (O XML tem o mesmo CNPJ do Certificado ??) CNPJEmitente := OnlyNumber(NFSe.Prestador.CNPJ); CNPJCertificado := OnlyNumber(TACBrNFSe(TNotasFiscais(Collection).ACBrNFSe).SSL.CertCNPJ); // verificar somente os 8 primeiros digitos, para evitar problemas quando // a filial estiver utilizando o certificado da matriz {if Copy(CNPJEmitente, 1, 8) <> Copy(CNPJCertificado, 1, 8) then raise EACBrNFSeException.Create('Erro ao Assinar. O XML informado possui CNPJ diferente do Certificado Digital' );} // Gera novamente, para processar propriedades que podem ter sido modificadas XMLStr := GerarXML; // XML já deve estar em UTF8, para poder ser assinado // XMLUTF8 := ConverteXMLtoUTF8(XMLStr); FXMLOriginal := XMLUTF8; with TACBrNFSe(TNotasFiscais(Collection).ACBrNFSe) do begin if Assina then FXMLAssinado := SSL.Assinar(String(XMLUTF8), 'Rps', Configuracoes.Geral.ConfigGeral.Prefixo3 + 'InfRps') else FXMLAssinado := FXMLOriginal; // FXMLOriginal := FXMLAssinado; Leitor := TLeitor.Create; try leitor.Grupo := FXMLAssinado; NFSe.signature.URI := Leitor.rAtributo('Reference URI='); NFSe.signature.DigestValue := Leitor.rCampo(tcStr, 'DigestValue'); NFSe.signature.SignatureValue := Leitor.rCampo(tcStr, 'SignatureValue'); NFSe.signature.X509Certificate := Leitor.rCampo(tcStr, 'X509Certificate'); finally Leitor.Free; end; if Configuracoes.Arquivos.Salvar then Gravar(CalcularNomeArquivoCompleto(), ifThen(Assina, FXMLAssinado, FXMLOriginal)); end; end; Outro ponto que do meu ponto de vista está com problema, trata-se do retorno da consulta, as variaveis i e ii foram usadas de forma indiscriminada, incrementou a variavel para um colletion, e usou em outro, com isso as vezes a consulta retorna erro de List of bounds (-1). Segue unit ACBrNFSeWebServices.pas devida apreciação do moderador ACBrNFSeNotasFiscais.pas ACBrNFSeWebServices.pas
-
O trecho da unit ACBrDFeCapicom, quando passa na função, XmlEstaAssinado() não deveria ter um exit ? Pois quando o xml já assinado é submetido novamente está gerando um erro desconhecido na linha: // Assinando com MSXML e CryptoLib // signedKey := xmldsig.sign(dsigKey, $00000002); << Erro aqui if (signedKey = nil) then raise EACBrDFeException.Create('Assinatura Falhou.'); Segue trecho do código para analise: function TDFeCapicom.Assinar(const ConteudoXML, docElement, infElement: String): String; var PosIni, PosFim: integer; URI, AXml, TagEndDocElement, XmlAss: String; xmldoc: IXMLDOMDocument3; xmldsig: IXMLDigitalSignature; dsigKey: IXMLDSigKey; signedKey: IXMLDSigKey; PrivateKey: IPrivateKey; begin CoInitialize(nil); try CarregarCertificadoSeNecessario; AXml := ConteudoXML; XmlAss := ''; if not XmlEstaAssinado(AXml) then begin URI := ExtraiURI(AXml); TagEndDocElement := '</' + docElement + '>'; AXml := copy(AXml, 1, PosLast(TagEndDocElement, AXml) - 1); AXml := AXml + SignatureElement(URI, False) + TagEndDocElement; end;
-
Certificado A3 Pronova Sendo Excluido
Antonio Gomes replied to [email protected]'s tópico in ACBrNFe
já temos 2 relatos do mesmo problema. Cartao A3 - conseguiu achar uma solucao ? -
Fast Report - Propriedades novas/removidas
Antonio Gomes replied to Antonio Gomes's tópico in ACBrNFSe
Juliomar: Segue unit com uma variavel que foi esquecida de colocar. Ao enviar o e-mail o pdf para anexar, com isso esqueci de colocar o NFSe.IdentificacaoRps.Serie somado do numero da NFS-e. ACBrNFSeDANFSeFR.pas -
Juliomar: Mais um datamodule que necessita ser removido do projeto ACBr, senão vai ser essa dor de cabeça pelo resto da vida. E além de remover, tem que colocar o objeto sendo instanciado no carregar do componente, nada de ficar pregado na tela. Mesmo trabalho que enviei para vocês dias atrás da NFS-e....
- 14 replies
-
- AcbrBoleto
- FastReport
-
(e 1 mais)
Tags:
-
Fast Report - Propriedades novas/removidas
Antonio Gomes replied to Antonio Gomes's tópico in ACBrNFSe
Comecei fazer no meu software, o MDF-e, é mais um ponto a ser removido o Datamodule... Moderador, poderia eu mexer e enviar o código fonte alterado ? -
Fast Report - Propriedades novas/removidas
Antonio Gomes replied to Antonio Gomes's tópico in ACBrNFSe
usei a mesma chamada que já existia -
Fast Report - Propriedades novas/removidas
Antonio Gomes replied to Antonio Gomes's tópico in ACBrNFSe
Um outro detalhe: o instalador vai ter que ser ajustado, acabei de testar aqui. Se eu puder mexer nele também e mandar... -
Fast Report - Propriedades novas/removidas
Antonio Gomes replied to Antonio Gomes's tópico in ACBrNFSe
Nao entendi Juliomar, essas units foram as que sobraram, apos retirar as chamadas delas. Na verdade é o TDatamodule isso dai. seria isso seu questionamento ? -
Funcao de consulta de lote por RPS com erro também, ao terminar de consulta destroi a componente com o retorno que veio do webservice, segue codigo fonte comentado 2 linhas. ACBrNFSeWebServices.pas
-
Fast Report - Propriedades novas/removidas
Antonio Gomes replied to Antonio Gomes's tópico in ACBrNFSe
Esqueci de mencionar, pode deletar as units ACBrNFSeDANFSeFRDM.dfm e ACBrNFSeDANFSeFRDM.pas -
Fast Report - Propriedades novas/removidas
Antonio Gomes replied to Antonio Gomes's tópico in ACBrNFSe
A alteração está correta, e como já estou em um ponto que é usado para o envio de e-mail, o trecho abaixo é chamado na função: procedure NotaFiscal.EnviarEmail(sPara, sAssunto: String; sMensagem: TStrings; EnviaPDF: Boolean; sCC: TStrings; Anexos: TStrings); Trecho com problema no nome do pdf gerado: if (EnviaPDF) then begin if Assigned(DANFSE) then begin DANFSE.ImprimirDANFSEPDF(FNFSe); NomeArq := PathWithDelim(DANFSE.PathPDF) + NumID + '-nfse.pdf'; AnexosEmail.Add(NomeArq); end; end; Uma sugestão boba, que coloquem essa procedure DANFSE.ImprimirDANFSEPDF(FNFSe); como funcao, e nela retorne o nome do arquivo pdf salvo. Para piorar ainda mais a coisa, no ato de gerar o pdf na unit relativa ao fast report, colocaram isso, que pode mudar o nome do pdf, logo, ao enviar o e-mail não vai encontrar o arquivo. with TACBrNFSe(ACBrNFSe).NotasFiscais.Items do begin if TACBrNFSe(ACBrNFSe).Configuracoes.Arquivos.NomeLongoNFSe then NomeArqXML := GerarNomeNFSe(UFparaCodigo(NFSe.PrestadorServico.Endereco.UF), NFSe.DataEmissao, NFSe.PrestadorServico.IdentificacaoPrestador.Cnpj, StrToIntDef(NFSe.Numero, 0)) else NomeArqXML := NFSe.Numero; end; E então, qual a sugestão ? Código fonte testado impressão no Ginfes. Qualquer problema notifique-me. ACBrNFSeDANFSeFR.pas -
Fast Report - Propriedades novas/removidas
Antonio Gomes replied to Antonio Gomes's tópico in ACBrNFSe
Exato! -
Fast Report - Propriedades novas/removidas
Antonio Gomes replied to Antonio Gomes's tópico in ACBrNFSe
Embora voce tenha aceitado a correção, o que acha de não existir esse datamodule e sim apenas uma unit com a classe, e os TFields removidos e criados em tempo de execução? Eu mudaria isso e enviaria, nunca mais daria problema de propriedade em dfm. -
Estou utilizando as versoes 4.13.15 do fast report e atualizado para 5.2.3 Porem, ao abrir o programa apresenta a mensagem de erro de Property Transparency not found no componente TFrxPDFExport. Como solução, alterei na criação do datamodule para instanciar esses 2 componentes manual. São eles TFrxReport e TFrxPDFExport. Com isso, não dá falta de propriedade não gravada no dfm. Todas as propriedades foram setadas no evento Create do form. Segue codigo fonte para analise e apreciação. ACBrNFSeDANFSeFRDM.dfm ACBrNFSeDANFSeFRDM.pas
-
segue fonte comentado para analise, se possivel ACBrNFSeWebServices.pas
-
A função abaixo da unit ACBrNFSeWebServices, sem conteúdo, não poderia ser removida? Pois o uso da mesma gera violação de acesso. se for usado variáveis carregadas por ela após. O segundo overload está correto. function TWebServices.ConsultaLoteRps(ANumLote, AProtocolo: String; const CarregaProps: boolean): Boolean; begin (* if CarregaProps then begin FConsLote.FCNPJ := ''; FConsLote.FIM := ''; end; FConsLote.FNumeroLote := ANumLote; FConsLote.FProtocolo := AProtocolo; Result := FConsLote.Executar; if not (Result) then FConsLote.GerarException( FConsLote.Msg ); *) end;
-
Alguns fontes ao finalizar o acesso ao serviço, no meu caso, consulta de nfse por rps, de acordo com essa funcao abaixo - Logo apos eu consultar eu nao posso ter acesso a lista de notas ? procedure TNFSeConsultarNfseRPS.FinalizarServico; begin inherited FinalizarServico; if Assigned(FRetornoNFSe) then FreeAndNil(FRetornoNFSe); end; Sempre utilizei do retorno da consulta para atualizar os dados da minha nota, pois esse provedor acontece de perder conexao, então sempre consulto antes para saber se existe a nota, e pego o retorno em ACBrNFSe1.WebServices.ConsNFSeRps.RetornoNFSe.ListaNFSe.CompNFSe.Count esse problema tem como ser resolvido ? Eu comentei as linhas: if Assigned(FRetornoNFSe) then FreeAndNil(FRetornoNFSe);
-
De acordo com o manual CNAB400, o documento do cedente será idenficado como: 4. Notas (1) TIPO/Nº DE INSCRIÇÃO DA EMPRESA/SACADOR TIPO INSCRIÇÃO NÚMERO DE INSCRIÇÃO 01 Nº DO CPF DO CEDENTE 02 Nº DO CNPJ DO CEDENTE 03 CPF DO SACADOR 04 CNPJ DO SACADOR Normalmente definem o tipo (CPF/CNPJ) e o número de inscrição do cedente. Se o título for negociado, deverão ser utilizados para indicar o CNPJ/CPF do sacador (cedente original), uma vez que os cartórios exigem essa informação para efetivação dos protestos. Para este fim, também poderá ser utilizado o registro tipo “5”. Porém o banco manda o tipo de inscrição com o numero = 02 - como cnpj. Tenho retorno meu da minha conta física o cpf vem com formatação similar ao do cnpj, preenchido com zeros antes... Solução que arrumei: Acessei o arquivo .RET e troquei para 01 para funcionar... talvez se não houvesse a validação do cnpj/cpf ou até mesmo usar uma propriedade para ignorar certas discrepâncias vindas dos bancos. No entanto, mesmo após colocar o 01 no arquivo, o mesmo insistia no erro de cnpj/cpf errado, pois o tipo de inscrição do cedente estava sendo trocado logo após a propriedade CNPJCPF ser trocado, com isso o evento Write da property aciona o SetCNPJCPF, que por sua vez faz a validação do dado informado. O que fiz foi apenas inverter a linha onde seta o tipo de inscrição, fazendo o componente saber antes do CNPJ/CPF ser informado, que tipo de informação será validada. Foi alterado no CNAB 240 e no 400. Segue unit alterada do trunk2. ACBrBancoItau.pas
-
Novo Suporte nas Danfes Fast Report - Atualizado
Antonio Gomes replied to hleorj's tópico in ACBrNFe
Porque não mudou apenas a propriedade de mascarar valores ? no TFrxmemoview, ao inves de criar 2 arquivos. -
Solução alá peppa pig: criei um evento: procedure TFTransmissaoNFS.frxPDFExport_NFSe_BeginExport(Sender: TObject); begin if Sender is TfrxPDFExport then TfrxPDFExport(Sender).FileName := NomeArquivoPDF_TempFastReport; end; Antes de iniciar o processamento eu fiz: NomeArquivoPDF_TempFastReport := ''; if dmComercial.ACBrNFSe1.DANFSe is TACBrNFSeDANFSeFR then NomeArquivoPDF_TempFastReport := dmComercial.ACBrNFSe1.DANFSe.PathPDF + dmComercial.ACBrNFSe1.NotasFiscais.Items[0].Nfse.Numero + '-nfse.pdf'; if dmComercial.ACBrNFSe1.DANFSe is TACBrNFSeDANFSeFR then begin TACBrNFSeDANFSeFR(dmComercial.ACBrNFSe1.DANFSe).dmDanfse.frxReport.OnGetValue := frReport_TransmiteNFSe_GetValue; TACBrNFSeDANFSeFR(dmComercial.ACBrNFSe1.DANFSe).dmDanfse.frxReport.OnBeforePrint := frReport_TransmiteNFSe_BeforePrint; TACBrNFSeDANFSeFR(dmComercial.ACBrNFSe1.DANFSe).dmDanfse.frxPDFExport.OnBeginExport := frxPDFExport_NFSe_BeginExport; end; Com isso, ao iniciar a geração do pdf lá pelo filtro export do fast report, o nome do arquivo a ser anexado no e-mail fica correto.
-
Na funcao: procedure NotaFiscal.EnviarEmail(...) No ponto abaixo, onde seta o nome do arquivo xml, está setando como numero da nfse + '-nfse.pdf', porém chamar a impressão do pdf na unit ACBrNFSeDANFSeFR, pela função ImprimirDANFSePDF está trocando: Unit: ACBrNFSeNotasFiscais if (EnviaPDF) then begin if TACBrNFSe( TNotasFiscais( Collection ).ACBrNFSe ).DANFSE <> nil then begin TACBrNFSe( TNotasFiscais( Collection ).ACBrNFSe ).DANFSE.ImprimirDANFSEPDF(NFSe); NomeArqPDF := NomeArqXML; NomeArqPDF := StringReplace(NomeArqPDF, 'NFSe', '', [rfIgnoreCase]); NomeArqPDF := PathWithDelim(TACBrNFSe( TNotasFiscais( Collection ).ACBrNFSe ).DANFSE.PathPDF) + NomeArqPDF + '-nfse.pdf'; AnexosEmail.Add(NomeArqPDF); end; end; procedure TACBrNFSeDANFSeFR.ImprimirDANFSePDF(NFSe: TNFSe); const TITULO_PDF = 'Nota Fiscal de Serviço Eletrônica'; var I: Integer; begin if PrepareReport(NFSe) then begin dmDanfse.frxPDFExport.Author := Sistema; dmDanfse.frxPDFExport.Creator := Sistema; // dmDanfse.frxPDFExport.Producer := Sistema; // dmDanfse.frxPDFExport.Title := TITULO_PDF; dmDanfse.frxPDFExport.Subject := TITULO_PDF; // dmDanfse.frxPDFExport.Keywords := TITULO_PDF; dmDanfse.frxPDFExport.ShowDialog := False; for I := 0 to TACBrNFSe(ACBrNFSe).NotasFiscais.Count -1 do begin // dmDanfse.frxPDFExport.FileName := PathPDF+ dmDanfse.NFSe.Numero+dmDanfse.NFSe.CodigoVerificacao+'.pdf'; dmDanfse.frxPDFExport.FileName := PathPDF+ dmDanfse.NFSe.Numero+'.pdf'; << Diferente aqui dmDanfse.frxReport.Export(dmDanfse.frxPDFExport); end; end; end; Não anexei fonte, pois estou desatualizado e baseado no trunck apenas.
-
Mais uma alteração no dfm para suprir necessidade de impressão, o campo dataemissao da NFS-e vem com a hora, no entanto, estava com tamanho 10, alterei para suprimir a hora, segue exemplo no xml de retorno da NFS-e <DataEmissao>2014-09-11T17:25:50</DataEmissao> ACBrNFSeDANFSeFRDM.pas ACBrNFSeDANFSeFRDM.dfm
-
Outro problema encontrado: o tipo tsCodigoTributacao C Código de Tributação 20 no manual está como string de 20, no dmdanfse está como string1, logo ao ler o campo do xml CodigoTributacaoMunicipio dá problema e pega apenas o primeiro digito. <Servico> <Valores> <ValorServicos>100</ValorServicos> <IssRetido>2</IssRetido> <ValorIss>3</ValorIss> <BaseCalculo>100</BaseCalculo> <Aliquota>3</Aliquota> <ValorLiquidoNfse>100</ValorLiquidoNfse> </Valores> <ItemListaServico>1406</ItemListaServico> <CodigoTributacaoMunicipio>3329501</CodigoTributacaoMunicipio> <<<<<<<<<< Esse campo <Discriminacao>PRESTACAO DE SERVICOS/MONTAGEM</Discriminacao> <CodigoMunicipio>3169901</CodigoMunicipio> </Servico> Esse problema está no TField declarado no cdsServicos, o mesmo poderia ser mudado para 20 posições, dentro do dfm... segue trecho: object cdsServicosCodigoTributacaoMunicipio: TStringField FieldName = 'CodigoTributacaoMunicipio' Size = 20 end
-
Estava eu precisando que saísse a serie e o tipo do RPS na impressão, então troquei o arquivo FR3 na chamada do componente por um modelo by ginfes. Questiono: Mudei no fonte para receber a serie da RPS com 5 caracteres e receber o tipo da mesma. Se for útil para alguém e puderem incorporar ao pacote. Me baseei no manual para alterar: TsNumeroRps N Número do RPS 15 TsSerieRps C Número de série do RPS 5 TsTipoRps N Código de tipo de RPS 1 - RPS 2 – Nota Fiscal Conjugada (Mista) 3 – Cupom ACBrNFSeDANFSeFRDM.dfm ACBrNFSeDANFSeFRDM.pas