Ir para conteúdo
  • Cadastre-se

Antonio Gomes

Membros
  • Total de ítens

    729
  • Registro em

  • Última visita

  • Days Won

    1

Tudo que Antonio Gomes postou

  1. 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.
  2. 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
  3. segue fonte comentado para analise, se possivel ACBrNFSeWebServices.pas
  4. Antonio Gomes

    funcao sem scopo

    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;
  5. Antonio Gomes

    Ginfes - Trunk2

    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);
  6. 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
  7. Porque não mudou apenas a propriedade de mascarar valores ? no TFrxmemoview, ao inves de criar 2 arquivos.
  8. 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.
  9. 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.
  10. 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
  11. 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
  12. 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
  13. Não acho Regys, pois a linha que agarra é essa: Propriedades := Extension.EncodedData.Format(True); Em debug isso dai fica... fica...
  14. Como criar esse arquivo .RES ? E qual finalidade ? Pelo que conheço desse arquivo... não captei bem sua idéia.
  15. Descobri o que era: Transicao entre Delphi 2007 e XE2 O chato do unicode! Botei a variavel antes numa string, e usei pelo LoadFromString e funcionou. A saber o caracter era o #0
  16. Sim eu vi. Mas nao sabia que o rps tinha formatação pre fixada...
  17. Esse problema ainda persiste. Pessoal do ACbr, nao tem como remover isso do componente? E colocar o cnpj como propriedade ?
  18. Ainda hoje 30 04 2015 ocorre lentidao na linha Propriedades := Extension.EncodedData.Format(True); No CT-e a coisa fica pior.
  19. O trecho abaixo: Do nada ao passar para o RAD Studio XE2, passou dar problema que o arquivo está sendo cortado. O erro acontece ao repassar o valor para ArquivoXML.Text, nessa linha o texto já vem cortado. A solução paliativa que fiz, foi usar o comando LoadFromString direto do meu campo onde está o RPS, na ocasião estou lendo meu xml direto de um camo BLOB do banco de dados, segue exemplo: if cdsNFS.FieldByName('XMLRPS_NFS_NOTA').AsString <> '' then dmComercial.ACBrNFSe1.NotasFiscais.LoadFromString(cdsNFS.FieldByName('XMLRPS_NFS_NOTA').AsString) else if cdsNFS.FieldByName('XMLNFSE_NFS_NOTA').AsString <> '' then dmComercial.ACBrNFSe1.NotasFiscais.LoadFromString(cdsNFS.FieldByName('XMLNFSE_NFS_NOTA').AsString) else raise Exception.Create('XML da NFS-e ou RPS não pode ser lido. Favor verificar a emissão da NFS-e.'); Tenho isso gravado no banco pelo fato de cliente perder xml, logo, fica tudo la registrado, e ao emitir é gravado o campo, e para transmitir passo para outra tela... (isso aqui não importa muito, estou dizendo a titulo de explicar...) O estranho é a variavel LocNFSeR.Leitor.Arquivo ter o corte já logo no inicio. Em anexo segue o rps que fiz o load. (note que troquei apenas os dados do emissor e cliente) function TNotasFiscais.LoadFromStream(Stream: TStringStream): boolean; var LocNFSeR : TNFSeR; ArquivoXML: TStringList; XML : AnsiString; Tipo: Integer; {$IFDEF DELPHI2009_UP} Encoding : TEncoding; {$ENDIF} CodigoMunicipio, Prestador, RazaoSocial, CNPJ, IM, NumeroRPS, SerieRPS, TipoRPS: String; ok: Boolean; begin try Result := True; LocNFSeR := TNFSeR.Create(Self.Add.NFSe); ArquivoXML := TStringList.Create; LocNFSeR.Leitor.CarregarArquivo(Stream); ArquivoXML.Text := LocNFSeR.Leitor.Arquivo; ArquivoXML.Text := StringReplace(StringReplace( ArquivoXML.Text, '&lt;', '<', [rfReplaceAll]), '&gt;', '>', [rfReplaceAll]); ArquivoXML.Text := NotaUtil.RetirarPrefixos(ArquivoXML.Text); 2015000000161021-Rps.xml 2015000000161021-Rps.xml
  20. Antonio Gomes

    Danfse - Fast Report

    O trecho abaixo, quando é usado os 15 digitos do numero da RPS que é permitido, ao passar nessa funcao, corta-se para 9. Seria possivel comentarem tal função ? with IdentificacaoRps do begin FieldByName('Numero').AsString := DFeUtil.FormatarNumeroDocumentoFiscal(Numero); // FieldByName('Serie').AsString := Serie; // FieldByName('Tipo').AsString := DFeUtil.SeSenao(Tipo = trRPS, '0','1'); end; A ponto de deixa-la assim ? Deixar o numero do RPS do jeito que eu criei? sem corta-lo para 9 digitos with IdentificacaoRps do begin FieldByName('Numero').AsString := Numero; // FieldByName('Serie').AsString := Serie; // FieldByName('Tipo').AsString := DFeUtil.SeSenao(Tipo = trRPS, '0','1'); end; ACBrNFSeDANFSeFRDM.pas ACBrNFSeDANFSeFRDM.pas
  21. Entendo, você... seria o caso também orientar quem desenvolve usar pelo menos o mesmo tipo de variável, assim ocorreria mesmo isso? Não concorda? Mas isso poucos fazem que é ler as mensagens que aparecem embaixo ali na tela do linkeditor... a culpa não é de vocês.
  22. Compilar ou fazer build para catar piolho no programa tem andado dificil, no XE2 ou similar... Por acaso alguem que passa por esses hints monstruosos tem a receita de bolo para oculta-los ? Geralmente eu entro no fonte e coloco la a diretiva {$hints off}, porém não vou entrar no fonte desse componente todo, pois ao atualizar perderia tudo de novo. Mas um modo de colocar generico para ser ignorado o pacote acbr do ao fazer build? E arrumar o fonte? para string ? fora de cogitação ? [DCC Warning] pnfsNFSeG.pas(695): W1057 Implicit string cast from 'AnsiString' to 'string' [DCC Warning] pnfsNFSeG.pas(695): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString' [DCC Warning] pnfsNFSeG.pas(696): W1057 Implicit string cast from 'AnsiString' to 'string' [DCC Warning] pnfsNFSeG.pas(696): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString' [DCC Warning] pnfsNFSeG.pas(697): W1057 Implicit string cast from 'AnsiString' to 'string' [DCC Warning] pnfsNFSeG.pas(697): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString' [DCC Warning] pnfsNFSeG.pas(699): W1057 Implicit string cast from 'AnsiString' to 'string' [DCC Warning] pnfsNFSeG.pas(699): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString' [DCC Warning] pnfsNFSeG.pas(731): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString' [DCC Warning] pnfsNFSeG.pas(753): W1058 Implicit string cast with potential data loss from 'Variant' to 'AnsiString' [DCC Warning] pnfsNFSeG.pas(801): W1057 Implicit string cast from 'AnsiString' to 'string'
  23. A impressao da contingencia teSVCAN deu problema também, porém tive que acrescentar na linha abaixo, o teSVCAN. if ((FNFe.Ide.tpEmis in [teNormal, teSVCAN, teSCAN,teSVCRS,teSVCSP])) then Linha 1477 da unit ACBrNFeDANFEFRDM
  24. Ao fazer a impressão do DPEC/EPEC não autorizado e autorizado, deparei com o mesmo rótulo de texto acima do nProt. O problema está no código abaixo: if (FNFe.Ide.tpEmis = teDPEC) then begin FieldByName('Contingencia_Descricao').AsString := 'NÚMERO DE REGISTRO DPEC'; //prioridade para ProtocoloNFe informado if DFeUtil.NaoEstaVazio(FDANFEClassOwner.ProtocoloNFe) then FieldByName('Contingencia_Valor').AsString := FDANFEClassOwner.ProtocoloNFe else begin try FieldByName('Contingencia_Valor').AsString := FNFe.procNFe.nProt + ' ' + DFeUtil.SeSenao(FNFe.procNFe.dhRecbto <> 0, DateTimeToStr(FNFe.procNFe.dhRecbto), ''); FieldByName('Contingencia_Descricao').AsString := 'PROTOCOLO DE AUTORIZAÇÃO DE USO'; except raise EACBrNFeException.Create('Protocolo de Registro no DPEC não informado.') end; end; end Mudei para: if DFeUtil.NaoEstaVazio(FNFe.procNFe.nProt) then // DPEC TRANSMITIDO begin FieldByName('Contingencia_Descricao').AsString := 'PROTOCOLO DE AUTORIZAÇÃO DE USO'; FieldByName('Contingencia_Valor').AsString := FNFe.procNFe.nProt + ' ' + DFeUtil.SeSenao(FNFe.procNFe.dhRecbto <> 0, DateTimeToStr(FNFe.procNFe.dhRecbto), ''); end else begin FieldByName('Contingencia_Descricao').AsString := 'NÚMERO DE REGISTRO DPEC'; if DFeUtil.NaoEstaVazio(FDANFEClassOwner.ProtocoloNFe) then FieldByName('Contingencia_Valor').AsString := FDANFEClassOwner.ProtocoloNFe; end; Caso seja util, e puder incorporar. ACBrNFeDANFEFRDM.pas
×
×
  • 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.